RGB的定义:
#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
COLORREF的定义:
typedef DWORD COLORREF;
所以RGB的位表示如下:
DWORD 16-13bit 12-9bit 8-5bit 4-1bit
RGB 00 b g r
ARGB的定义:
typedef DWORD ARGB;
#define ALPHA_SHIFT 24
#define RED_SHIFT 16
#define GREEN_SHIFT 8
#define BLUE_SHIFT 0
#define ALPHA_MASK ((ARGB) 0xff << ALPHA_SHIFT)
#define MAKEARGB(a, r, g, b) / (((ARGB) ((a) & 0xff) << ALPHA_SHIFT)| / ((ARGB) ((r) & 0xff) << RED_SHIFT) | / ((ARGB) ((g) & 0xff) << GREEN_SHIFT)| / ((ARGB) ((b) & 0xff) << BLUE_SHIFT))
DWORD 16-13bit 12-9bit 8-5bit 4-1bit
ARGB a r g b
由上面的定义知:
RGB to ARGB 就是补齐DOWRD的13-16位,并交换1-4位与9-12位
c为RGB格式:
#define RGB2ARGB( c ) 0xff000000 | (c & 0x000000ff) << 16 | (c & 0x0000ff00) | (c & 0x00ff0000) >> 16
example:
ARGB a = RGB2ARGB(RGB(r,g,b));
谢谢!转载请链接。