2011-03-31 121 views
0

我想做一个颜色值的映射。例如,从0到25的值将表示蓝色的变化,从较亮到较暗。 我从来没有这样做过,所以我想就基础知识提供一些建议和解释。 感谢您的帮助。将双精度值映射到颜色

+5

尝试第1项。然后回来 – Neal 2011-03-31 16:55:22

+0

首先查看[javadoc]中的Color对象(http://download.oracle.com/javase/6/docs/api/java/awt/Color。HTML) – Jeremy 2011-03-31 17:05:43

+0

一个简单的map.put(0,新的颜色(/ * *无论代码为蓝色阴影你需要* /)应该做的伎俩,不是? – Soronthar 2011-03-31 18:40:40

回答

0

那么在C++中,这样做

vector<Color> myvector; 

for(int i = 0; i < 25; i++){ 
    myvector.push_bacK(Color(0,0,(int)(round(double(255/(i+1)))); 
} 

和您的载体将含有蓝色色调......

0

如果您正在使用RGB,该值越高 - >打火机的颜色会是

(255,255,255)是白色

(0,0,0)是黑色

由于255是最大的参数,所以可以将其除以想要的蓝色变体的数量

注意:(R,G,B)是整数参数,我建议找一个好的分母17,它给出15个不同的变化仅限蓝色

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 col = new Color(rVal,gVal,bVal);

并使用它如何你的愿望。 :-)

2

这是我的解决方案on gisthub用于双色到蓝色渐变的颜色映射。

结果示例:值0 - 100 with stepcount 1 1