2011-03-31 125 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