将double值映射到Color

时间:2011-03-31 16:54:37

标签: java colors map

我想做一个颜色值的地图。例如,从0到25的值将表示从浅色到深色的蓝色变化。 我从来没有这样做过,所以我想对基础知识提出一些建议和解释。 谢谢你的帮助。

4 个答案:

答案 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 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种不同的蓝色变体颜色