我想做一个颜色值的地图。例如,从0到25的值将表示从浅色到深色的蓝色变化。 我从来没有这样做过,所以我想对基础知识提出一些建议和解释。 谢谢你的帮助。
答案 0 :(得分:6)
第一步是选择固定点的颜色,例如白色为0,蓝色为25,如您所示。然后你可以添加绿色为50,红色为75,依此类推。
每个固定点映射到R G B值。如果我们使用0到1之间的浮点数,则数学运算更容易:
Value Red Green Blue
0 0.33 0.33 0.34
25 0.00 0.00 1.00
50 0.00 1.00 0.00
如果你保持R + G + B不变,那么颜色的强度将保持不变(参见:http://en.wikipedia.org/wiki/HSL_and_HSV)
现在你建立两种固定颜色。您可以获得范围低端和高端的RGB值。以值15为例,让我们一起工作。 15介于0和25之间,所以:
rLow = 0.33f; gLow = 0.33f; bLow = 0.34f;
rHigh = 0.0f; gHigh = 0.0f; bHigh = 0.0f;
float prop = ( x - vLow) / ( vHigh - vLow );
[e.g. = ( 15 - 0 ) / ( 25 - 0 ) = 0.6 ]
然后对于你所做的每种颜色:
float rVal = rLow + prop * ( rHigh - rLow );
[e.g. = 0.33 + 0.6 * ( 0.00 - 0.33 ) = 0.132 ]
同样,您可以解释为绿色和蓝色:
float gVal = gLow + prop * ( gHigh - gLow );
float bVal = bLow + prop * ( bHigh - bLow );
蓝色示例如下:
[e.g. = 0.34 + 0.6 * ( 1.00 - 0.34 ) = 0.736 ]
然后,您可以像这样创建Java Color对象:
颜色col =新颜色(rVal,gVal,bVal);
并按照您的意愿使用它。 : - )
答案 1 :(得分:2)
这是我的解决方案on gisthub,用于使用蓝红色渐变进行双色到彩色的映射。
结果示例:值0 - 100,步数为1
答案 2 :(得分:0)
在c ++中,做一些像
这样的事情vector<Color> myvector;
for(int i = 0; i < 25; i++){
myvector.push_bacK(Color(0,0,(int)(round(double(255/(i+1))));
}
你的矢量将包含蓝色阴影......
答案 3 :(得分:0)
如果您使用RGB,则值越高 - &gt;颜色越淡
(255,255,255)是白色
(0,0,0)是黑色
由于255是最大的参数,您可以将其除以您想要的蓝色变化数
注意:(R,G,B)是整数参数,我建议找到一个像17这样的好分母,它只给出了15种不同的蓝色变体颜色