2011-03-22 58 views
2

我試圖用Java實現我的顏色編輯器。它應該是一個簡單的軟件。用戶將以十六進制RGB輸入顏色,例如:0xFF00FF。我知道如何計算色調,色度,飽和度和亮度,但是如何將Hue值添加或減去該給定顏色?這是個謎。如何以編程方式將Hue添加到給定顏色?

是否有任何算法或公式可供使用?

現在我使用這種方法,但我認爲結果與Adobe Photoshop有所不同。

public void addHue(float addHue) { 
    float c = getChroma(); 
    addHue %= 6; 
    if (addHue < 2) { 
     float n = 1 - green; 
     green = green + addHue * n; 
    } else if (addHue < 4) { 
     addHue -= 2; 
     float n = 1 - blue; 
     blue = blue + addHue * n; 
    } else if (addHue < 6) { 
     addHue -=4; 
     float n = 1 - red; 
     red = red + addHue * n; 
    } 
    if (green > 1) green = 1; 
    else if (green < 0) green = 0; 
    if (red > 1) red = 1; 
    else if (red < 0) red = 0; 
    if (blue > 1) blue = 1; 
    else if (blue < 0) blue = 0; 
} 
+0

你爲什麼要添加色相?你想達到什麼目的?這是一個用戶控件嗎? – 2011-03-22 09:20:42

回答

1

java.awt.Color類可以幫助這個。

+0

嗨大衛,很遺憾我不能那樣做。我試圖將這個實現到一個J2ME項目中。但感謝您的關注。 – 2011-03-24 04:15:20

1

我不明白你試圖通過將兩種色調加在一起來實現。

色調是一個角度,給出您所代表顏色的「色調」。如果你認爲度數,色調將在[0,360 [範圍內]。此外,45和405的值將表示相同的色調。

當你想操縱色調時,你必須考慮到這一點。也就是說,你是否想平均兩個值,例如355和5,正確的結果可能是0(繪製一個圓,並取這兩個值之間的最小半角)或180(最大半角)。


我怎麼做的在Android(不具有彩色操作實用程序)是創建一個存儲彩色(RGB和HSV)的兩種表示我自己的顏色類。

然後我有方法可以設置RGB或設置單純皰疹病毒。添加相同的顏色空間是微不足道的。然後每次調用這些方法時,我分別調用一個updateHSV或updateRGB方法來計算新值中的顏色分量。

class Color { 
    float[] hsv; 
    float[] rgb; 

    public void setRgb(float[] rgb) { 
    System.arraycopy(rgb, 0, this.rgb, 0, 3); 
    computeHsvFromRgb(); 
    } 

    public void setHsv(float[] hsv) { 
    System.arraycopy(hsv, 0, this.hsv, 0, 3); 
    computeRgbFromHsv(); 
    } 

    // ... 
} 

對於彩色皈依示例代碼:

+0

感謝您的關注MarvinLabs。我真正要問的是,「如何增加或減少色調值給定顏色」。我有一個顏色,例如#FFFF00是黃色的。如何添加色調,例如45添加到我的顏色(#FFFF00)。我應該增加/減少紅色部分,綠色部分和藍色部分的值? – 2011-03-24 04:13:59

+1

想法是始終保持顏色的兩種表示形式都已更新。所以你可以設置RGB,然後操縱HSV,最後返回RGB。見編輯的答案。 – 2011-03-24 09:37:29

+0

嗨馬文,謝謝你的回覆。我認爲computeHsvFromRgb();和computeRgbFromHsv();是我需要的。你爲什麼不分享它?這是一個祕密公式嗎? – 2011-05-26 08:38:02

相關問題