|
struct PIXEL
{
unsigned char R;
unsigned char G;
unsigned char B;
unsigned char A;
};
PIXEL RGB565to888(unsigned short color, unsigned char Alpha)
{
PIXEL pixel;
unsigned int r = (color>>11) & 0x1f;
unsigned int g = (color>> 5) & 0x3f;
unsigned int b = (color ) & 0x1f;
pixel.A = Alpha;
pixel.R = (r<<3) | (r>>2); // 就是这个地方我看不明白,为什么这么算就能转成8位的值了。
pixel.G = (g<<2) | (g>>4);
pixel.B = (b<<3) | (b>>2);
return pixel;
}
函数的功能是将一个r5g6b5的颜色值转换成r8g8b8的值,
如:在r5g6b5里rgb的值可能是:r:22 g:52 b:15 在8位下就应该是:r:180 g:210 b:123
代码中我不明白的地方,如果是我自己算的话,我可能是将r g b分别除以31然后再乘以255,但它仅用了3个位运算就可以算出来了,我实在看不明白,有朋友知道么? |
|