如何计算四色渐变?

时间:2009-07-09 23:28:44

标签: graphics drawing colors gradient

如果我在一个正方形的四个角上有四种颜色(A,B,C和D),我想用四个颜色之间很好地融合的渐变填充该正方形,我将如何计算该点的颜色E'

E越靠近任何其他点,颜色应该强烈影响结果。

知道怎么做吗?速度和简单性比准确性更好。

colours http://rabien.com/image/colours.png

3 个答案:

答案 0 :(得分:23)

两种颜色之间需要渐变时的最佳解决方案是使用HSV表示(色相饱和度值)。

如果你有两种颜色的HSV值,你只需对H,S和V进行线性插值,你就会得到漂亮的颜色(RGB空间中的插值总会导致“坏”结果)。

您还可以找到here分别从RGB到HSV以及从HSV到RGB的公式。

现在,对于四角的问题,你可以对四个H / S / V值进行线性组合,加权距离E到四个点A,B,C和D的距离。

编辑:与tekBlues相同的方法,但在HSV空间(在RGB和HSV空间中测试它很容易。你会看到差异。在HSV中,你只需转动彩色圆柱,这是为什么它给出了很好的结果)

EDIT2:如果您更喜欢“速度和简单性”,您可以使用L1范数,而不是L2范数(欧几里德范数)

因此,如果a是您的方块的大小,并且您的点的坐标是A(00),B(0,{{1 }}),C(aa),D(0a),然后是点E的Hue(a,{{ 1}})可以用:

计算
x

其中y是A点的Hue,Hue(E) = ( Hue(B)*y/a + Hue(A)*(1-y/a) ) * (x/a) + ( Hue(D)*y/a + Hue(C)*(1-y/a) ) * (1-x/a) B的Hue等等......

您为饱和度和值应用相同的公式。

获得点E的色相/饱和度/值后,可以在RGB空间中对其进行变换。

答案 1 :(得分:2)

查看这个网站,它提供了@ThibThib评论的视觉演示,“HSV中的渐变会更加令人满意”:

http://www.perbang.dk/rgbgradient/

它是一个渐变创建器,它将创建并显示RGB渐变和HSV渐变。

如果您尝试从FFAAAA到AAFFAA(浅红色到绿色)的9个步骤,您将获得通过浅黄色的良好过渡,并且HSV和RGB看起来相似。

但是尝试从FF0000到00FF00(粗体红色到绿色)的9个步骤,你会看到RGB通过一个令人讨厌的绿褐色过渡。然而,HSV渐变通过粗体黄色过渡。

答案 2 :(得分:1)

  1. 确定点E到每个点A,B,C,D
  2. 的距离
  3. E点的颜色是红色/绿色/蓝色的组合。将每个颜色轴计算为A,B,C,D相同颜色轴的平均值,按距离进行测量。

    distance_a = sqrt((xa-xe)^ 2 +(ya-ye)^ 2)

    distance_b = ....

    sum_distances = distance_a + distance_b ...

    red =(red_a distance_a + red_b distance_b ...)/ sum_distances

    color_E = ColorFromARgb(红色,绿色,蓝色)