2011-05-05 74 views
4

我正在处理的这个算法的目标是从某些提供的颜色中输出颜色进度。通过颜色渐变,我的意思是在两种颜色(颜色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一次255次)。但是如果我想用两种任意颜色来做这个过程,比如A =(180,69,1)和B =(233,153,0)?

重要提示:如果使用十六进制(或任何其他类型的颜色符号),它会更容易实现,我也可以使用它,只需指定哪种类型(考虑到我正在使用PIL Python成像库),所以如果它与我很好)

显然它必须是一个尽可能均匀的分布,进展必须是均匀的。

我需要弄清楚这个算法,以便我可以在我的分形生成器中使用它(Mandelbrot Set,如果你愿意的话,可以google),所以重要的是尽可能柔和,不要打嗝。

在此先感谢。

回答

2

将您的RGB坐标转换为HSL或HSV并逐步遍历它们,一路转换回RGB。

+0

http://docs.python.org/library/colorsys.html http://en.wikipedia.org/wiki/HSL_and_HSV – 2011-05-05 17:57:02

+0

非常感谢! :D – 2011-05-05 18:18:03

+0

我有一个问题。我不知道如何在HSL和HSV颜色之间切换:/ – 2011-05-05 23:14:25

0

我只是插值的RGB值独立。请参阅thread

0

我对标题为Range values to pseudocolor的SO问题的回答可能对您有所帮助,因为它显示了一种生成特定颜色渐变(您称为颜色渐变的常用名称)的方法。

通常情况下,您可以通过计算每种颜色成分之间的差异或增量值,在任何颜色空间中的任何两种颜色之间进行插值,然后将这些值除以期望获得每个成分的小数增量量的中间步数在每一步之后申请。

然后,从每个第一颜色分量的值开始,相应的分数量可以叠加到它上面以确定每个中间阶跃颜色。或者,通过将(step_number/total_steps) * fractional_delta添加到起始颜色的初始颜色分量值,可以减小该方法固有的算术误差。

我相信@Jim Clay在他的回答中也是这样说的。如果您想要一些示例代码,请在评论中说明。

0

我推荐与Jim Clay相同的问题,但是从the top读取。或参阅关于interpolation的维基百科。