2013-08-02 116 views
-2

說我給函數一個簡單的藍色。然後它應該返回十六進制代碼或RGB爲深藍色,併爲淺藍色。我正在使用Java/android顏色函數返回陰影較淺和陰影較暗

+0

那麼這裏是你的問題的答案,最淺的藍色是白色的,最黑的是黑色的。 –

+0

如果你嘗試,這真的很容易。你有沒有嘗試過?你有什麼嘗試? (推斷你的問題是「我該怎麼做?」) – iamnotmaynard

+1

定義*陰影*。 – OldCurmudgeon

回答

3

一個好方法是將其轉換爲HSL color space,調整「亮度」組件並將其轉換回RGB。

我找到了兩個頁面,其中提到了可能使用的公式,或者您可以嘗試google解決java解決方案。

RGB to HSL

HSL to RGB


另一種選擇是使用YUV color space,爲其計算更容易。

在YUV色彩空間中,您可以通過更改Y值來調整黑度。

RGB到YUV

Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16 

V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128 

U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128 

YUV到RGB

B = 1.164(Y - 16)     + 2.018(U - 128) 

G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128) 

R = 1.164(Y - 16) + 1.596(V - 128) 

但是,你必須用鑷子 'YUV' 和 'RGB' 值0-255
(試試value = value & 0xFF

source

+0

感謝您的回覆。我會研究這些鏈接。之前從未聽說過HSL。 –

+0

我可以使用HSV代替HSL嗎?並簡單地改變V值? –

+2

這真的取決於你認爲的「陰影」。 HSL可以輕鬆使顏色變深或變淺。 HSV可以做其他事情。我認爲你想要的是真正的HSL,但你可以嘗試兩種方式,看看哪個更適合。 – MightyPork