2012-08-31 70 views

回答

2

下面是執行,直接Color類的源代碼:

public static float[] RGBtoHSB(int r, int g, int b, float[] hsbvals) { 
float hue, saturation, brightness; 
if (hsbvals == null) { 
    hsbvals = new float[3]; 
} 
    int cmax = (r > g) ? r : g; 
if (b > cmax) cmax = b; 
int cmin = (r < g) ? r : g; 
if (b < cmin) cmin = b; 

brightness = ((float) cmax)/255.0f; 
if (cmax != 0) 
    saturation = ((float) (cmax - cmin))/((float) cmax); 
else 
    saturation = 0; 
if (saturation == 0) 
    hue = 0; 
else { 
    float redc = ((float) (cmax - r))/((float) (cmax - cmin)); 
    float greenc = ((float) (cmax - g))/((float) (cmax - cmin)); 
    float bluec = ((float) (cmax - b))/((float) (cmax - cmin)); 
    if (r == cmax) 
    hue = bluec - greenc; 
    else if (g == cmax) 
     hue = 2.0f + redc - bluec; 
     else 
    hue = 4.0f + greenc - redc; 
    hue = hue/6.0f; 
    if (hue < 0) 
    hue = hue + 1.0f; 
} 
hsbvals[0] = hue; 
hsbvals[1] = saturation; 
hsbvals[2] = brightness; 
return hsbvals; 
} 
2

只需打開Eclipse - 按Ctrl + Shift + T(開放式),在色彩類型,找到一個java.awt中 - 和瞧。適用於大多數內置類型。

+0

這表明服務器沒有找到 –

+0

奇怪 - 我會嘗試重建型緩存: 與Eclipse關閉:進入工作區/ .metadata/.plugins/org.eclipse.jdt.core,除去*的.index和savedIndexNames .txt,重新啓動Eclipse。它將重建整個類型緩存。 – mtsvetkov

+0

它沒有工作 –

0

RGB未首先歸一化。它在正常範圍內正常化,通常正好在正確範圍內。所以亮度是最大的分量,亮度從0-255範圍到0-1範圍進行歸一化。飽和度也是這樣,它是從最大組件到最小組件的距離,並被擠壓到0-1範圍內。色調是色輪中的角度。但是,沒有它被直接轉換成HSV,並且沒有通過類似sRGB的標準化(sRGB是RGB/255並歸一化到0-1範圍)。

但是,你根本不需要知道這一點。它轉換成HSB。如果你來回轉換一堆,你可以得到舍入誤差嗎?你當然可以。除此之外,如果將RGB縮放爲1或1,000,000,則無關緊要,它將轉換爲表示0-1之間範圍內顏色的完全不同的方式。

相關問題