COLORREF 和RGBQUAD的区别



一、结构体
typedef struct tagRGBQUAD {
  BYTE    rgbBlue;
  BYTE    rgbGreen;
  BYTE    rgbRed;
  BYTE    rgbReserved;
} RGBQUAD;

 COLORREF RGB(
  BYTE byRed,    // red component of color
  BYTE byGreen,  // green component of color
  BYTE byBlue    // blue component of color
);
从GetPixel函数里的返回值是: RGB,它的颜色顺序是: R,G,B.(红绿蓝)

而:RGBQUAD的颜色顺序是:B,G,R,Reserved(蓝绿红). 得将RGB里的颜色变成BGR后,再给RGBQUAD赋值

二、COLORREF 和RGBQUAD的转换

 COLORREF rgb;
//rgb = pDC->GetBkColor(); //COLORREF的存储为 0x00BBGGRR,即R在低位。
 rgb = 0x00332211; //3是蓝色B,1是红色R
BYTE r,g,b;
r = GetRValue(rgb);
g = GetGValue(rgb);
b = GetBValue(rgb);
RGBQUAD rgbquad;
rgbquad.rgbBlue = b;
rgbquad.rgbGreen = g;
rgbquad.rgbRed = r;
CString strrgb,strrgbquad;
strrgb.Format("rgb=%x",rgb);
strrgbquad.Format("rgbquad=%x",rgbquad);
MessageBox(strrgb);
MessageBox(strrgbquad);


你可能感兴趣的:(COLORREF 和RGBQUAD的区别)