windows中RGB/ARGB顏色總結

 

之所以寫這個博文總結,是因爲在使用duilib的時候需要設置一個背景色,然後發現僅僅設置RGB值貌似不行,所以改成設置ARGB值了。然後沒有找到對應的API。第二個原因是每次搞不清楚alpha通道的兩個邊界值的函數,老是會忘記哪個是全透明,哪個是透明。RGB(255,255,255)到底是白色還是黑色。

 

目前在windows上主要是使用RGB宏來生成顏色,GDI+ Color類來生成ARGB顏色。

開始我以爲GDI中的RGB 和 GDI+中的ARGB 他們的順序是一樣的,結果我看代碼驗證了下發現是不一樣的。

 

RGB宏對應的內存模型:

RGB宏定義:

#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))

可以看出r是最低位,b是最高位,g是中間位。32位值的最高位是沒有使用的。默認爲0x0。

BYTE r = GetRValue(col);
BYTE g = GetGValue(col);
BYTE b = GetBValue(col);

#define GetRValue(rgb) (LOBYTE(rgb))
#define GetGValue(rgb) (LOBYTE(((WORD)(rgb)) >> 8))
#define GetBValue(rgb) (LOBYTE((rgb)>>16))

取R的值直接就取最低位。取B的值需要右移16位。G的值類似。

調試截圖:

 

GDI+ ARGB內存模型:

 

 

 

 

A就是alpha通道的含義,255表示不透明。0表示完全透明。

常用顏色值:

白色:rgb(255,255,255)

黑色:rgb(0,0,0)

紅色:rgb(255,0,0)

綠色:rgb(0,255,0)

藍色:rgb(0,0,255)

 

 

參考資料:

https://blog.csdn.net/klingde/article/details/44723679

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章