如何从调色板中制作颜色渐变

6 投票
3 回答
2441 浏览
提问于 2025-04-16 17:03

我正在开发一个算法,目标是从一些给定的颜色中输出一个颜色渐变。这里的颜色渐变指的是在两种颜色(颜色A和颜色B)之间创建一种“渐变”效果,并存储每个中间颜色的值(以(R,G,B)的形式表示)。

举个例子,如果给定的颜色是完全黑色 A = (0,0,0) 和完全白色 B = (255,255,255),那么最终的渐变结果会是:

P = ((0,0,0),(1,1,1),(2,2,2), .... ,(253,253,253),(254,254,254),(255,255,255)

这样一来,我们就能从白色开始,逐渐变成黑色。当然,对于黑白颜色来说,这个过程非常简单(只需每一步将RGB的值增加1,总共增加255次)。但是如果我想用两个任意的颜色,比如A = (180,69,1)和B = (233,153,0)来做这个过程呢?

重要提示:如果用十六进制(或其他颜色表示法)更容易实现,我也可以使用,只需说明是哪种类型(请注意,我正在使用PIL(Python图像库),所以如果它与此兼容,我就没问题)。

显然,颜色的分布必须尽可能均匀,渐变要保持一致。

我需要弄清楚这个算法,以便在我的分形生成器中使用(比如曼德尔布罗特集,想了解的话可以去谷歌一下),所以渐变要尽可能平滑,不能有突兀的变化。

提前感谢大家的帮助。

3 个回答

0

我在一个关于 范围值转伪彩色 的问题上的回答可能对你有帮助,因为它展示了一种生成特定颜色渐变的方法(你提到的颜色进程的常用名称)。

一般来说,你可以通过计算两个颜色之间的差值,或者叫做增量值,来在任何颜色空间中插值。具体来说,就是计算每种颜色的组成部分之间的差,然后把这个差值除以你想要的中间步骤数量,这样就能得到每个组成部分在每一步中需要增加的量。

接着,从第一个颜色的每个组成部分的值开始,可以不断地把对应的增量加上去,这样就能得到每一步的中间颜色。或者,你也可以通过将 (step_number/total_steps) * fractional_delta 加到起始颜色的组成部分值上,来减少这种方法中固有的算术误差。

我觉得这也是 @Jim Clay 在他的回答中所说的。如果你想要一些示例代码,可以在评论中告诉我。

0

我会独立地插值RGB值。你可以看看这个讨论串

2

把你的RGB颜色值转换成HSL或HSV格式,然后逐步处理这些值,再把它们转换回RGB格式。

撰写回答