bitmap convert to RGB565 display 收藏
http://blog.csdn.net/nitghost/archive/2009/02/23/3925678.aspx
<script type="text/javascript"> </script> <script type="text/javascript"> </script>
bitmap图片是一个RGB888,每个像素由3个字节组成,R->8bit,G->8bit,B->8bit;
RGB565 的每个pixels是由2字节组成,R->5bit,G->6bit,B->5bit。
转换的思路是取出原图的点,对没个采样进行运算。
- #define RGB565_MASK_RED 0xF800
- #define RGB565_MASK_GREEN 0x07E0
- #define RGB565_MASK_BLUE 0x001F
- void rgb565_2_rgb24( BYTE *rgb24, WORD rgb565)
- {
- //extract RGB
- rgb24[2] = (rgb565 & RGB565_MASK_RED) >> 11;
- rgb24[1] = (rgb565 & RGB565_MASK_GREEN) >> 5;
- rgb24[0] = (rgb565 & RGB565_MASK_BLUE);
- //amplify the image
- rgb24[2] <<= 3;
- rgb24[1] <<= 2;
- rgb24[0] <<= 3;
- }
- USHORT rgb_24_2_565( int r, int g, int b)
- {
- return ( USHORT )(((unsigned(r) << 8) & 0xF800) |
- ((unsigned(g) << 3) & 0x7E0) |
- ((unsigned(b) >> 3)));
- }
- USHORT rgb_24_2_555( int r, int g, int b)
- {
- return ( USHORT )(((unsigned(r) << 7) & 0x7C00) |
- ((unsigned(g) << 2) & 0x3E0) |
- ((unsigned(b) >> 3)));
- }
- COLORREF rgb_555_2_24( int rgb555)
- {
- unsigned r = ((rgb555 >> 7) & 0xF8);
- unsigned g = ((rgb555 >> 2) & 0xF8);
- unsigned b = ((rgb555 << 3) & 0xF8);
- return RGB(r,g,b);
- }
- void rgb_555_2_bgr24( BYTE * p, int rgb555)
- {
- p[0] = ((rgb555 << 3) & 0xF8);
- p[1] = ((rgb555 >> 2) & 0xF8);
- p[2] = ((rgb555 >> 7) & 0xF8);
- }
- #define RGB565_Val(r,g,b) (WORD)((r)<<11 | (g)<<5 | (b))
- WORD rgb555_2_rgb565( WORD rgb555)
- {
- BYTE r,g,b;
- FLOAT fRate = 63/31;
- //Get R G B
- r = (BYTE )(((rgb555 >> 7) & 0xF8)>>3);
- g = (BYTE )((((rgb555 >> 2) & 0xF8)>>3)*fRate);
- b = (BYTE )(((rgb555 << 3) & 0xF8)>>3);
- *(WORD *)pDest = RGB565_Val(RDest,GDest,BDest);
- }