windows中RGB/ARGB颜色总结

时间:2024-04-03 16:34:38

 

之所以写这个博文总结,是因为在使用duilib的时候需要设置一个背景色,然后发现仅仅设置RGB值貌似不行,所以改成设置ARGB值了。然后没有找到对应的API。第二个原因是每次搞不清楚alpha通道的两个边界值的函数,老是会忘记哪个是全透明,哪个是透明。RGB(255,255,255)到底是白色还是黑色。

 

目前在windows上主要是使用RGB宏来生成颜色,GDI+ Color类来生成ARGB颜色。

开始我以为GDI中的RGB 和 GDI+中的ARGB 他们的顺序是一样的,结果我看代码验证了下发现是不一样的。

 

RGB宏对应的内存模型:

windows中RGB/ARGB颜色总结

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的值类似。

调试截图:

windows中RGB/ARGB颜色总结

 

GDI+ ARGB内存模型:

windows中RGB/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