之所以寫這個博文總結,是因爲在使用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