2011-12-05 71 views
0

我試圖改變使用無符號整型(0xFF998877等...)的形式0xAABBGGRR其中A是阿爾法和B,G和R是藍色,綠色和紅色的着色。無符號整數和顏色

但是我想知道最好的方法是改變我傳入的顏色,使其慢慢變暗或變淺。

由於我沒有很多這樣使用unsigned int的經驗,所以我的解決方案只是將值減1,但這有奇怪的結果。有沒有一種很好的方法來改變RGB元素並保持Alpha恆定?在我的研究中,我確實發現可以將其他未簽名的整數相乘以產生我的最終結果,例如(0xFF * 0x99 * 0x99 * 0x99),但是這仍然將alpha值變量留在最終結果中。

任何幫助,非常感謝!

+0

我想你應該在位運算符讀,如果你要直接操作價值,而不是將其轉換爲HSL,調整它有(其中可能是最好的解決方案)。 – LiMuBei

回答

2

您需要做的是將您的顏色轉換爲HSL(or HSV),然後根據需要更改亮度(或值)。然後你需要將它轉換回RGB。

互聯網上有大量的代碼可用於執行此轉換。如果您遇到問題,我可以爲您提供一些我自己的代碼。

0

我對C++中的顏色操作一無所知,但是你能不能簡單地使用一個位掩碼?或者使用4 UINT8(unsigned char)寫一個表示顏色的類?那麼你可以很容易地寫出不同渠道的各種操作。

它將使一個偉大的API,以及:

Colour c(128,50,50,0); 
c.saturateRed(10); 
c.darkerBySteps(3); 
c.desaturateGreen(10); 
UINT32 rawColVal = c.getRawValue();