如果我在一个正方形的四个角上有四种颜色(A,B,C和D),我想用四个颜色之间很好地融合的渐变填充该正方形,我将如何计算该点的颜色E'
E越靠近任何其他点,颜色应该强烈影响结果。
知道怎么做吗?速度和简单性比准确性更好。
答案 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(0
,0
),B(0
,{{1 }}),C(a
,a
),D(0
,a
),然后是点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)
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(红色,绿色,蓝色)