将double值映射到Color

0 java colors map

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

Sim*_* G. 6

第一步是选择固定点的颜色,例如白色为0,蓝色为25,如您所示.然后你可以添加绿色为50,红色为75,依此类推.

每个固定点映射到RGB值.如果我们使用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
Run Code Online (Sandbox Code Playgroud)

如果你像这样保持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 ]
Run Code Online (Sandbox Code Playgroud)

然后为您执行的每种颜色:

float rVal = rLow + prop * ( rHigh - rLow );
[e.g.      = 0.33 + 0.6 * ( 0.00 - 0.33 ) = 0.132 ]
Run Code Online (Sandbox Code Playgroud)

同样,你解释为绿色和蓝色:

float gVal = gLow + prop * ( gHigh - gLow );
float bVal = bLow + prop * ( bHigh - bLow );
Run Code Online (Sandbox Code Playgroud)

蓝色示例如下:

[e.g.      = 0.34 + 0.6 * ( 1.00 - 0.34 ) = 0.736 ]
Run Code Online (Sandbox Code Playgroud)

然后,您可以像这样创建Java Color对象:

颜色col =新颜色(rVal,gVal,bVal);

并按照您的意愿使用它.:-)