RGB565格式互转,及彩条程序

来源:互联网 发布:网络用语ppt 编辑:程序博客网 时间:2024/06/08 02:23

(1)RGB565格式说明

      RGB565彩色模式, 一个像素占两个字节, 其中:第一个字节的前5位用来表示R(Red),第一个字节的后三位+第二个字节的前三位用来表示G(Green),第二个字节的后5位用来表示B(Blue)。如:15 14 13 1211 10 9 8 , 7 6 5 4 3 2 1 0

      而bitmap图片是一个RGB888,每个像素由3个字节组成,R->8bit,G->8bit,B->8bit;RGB565 的每个pixels是由2字节组成,R->5bit,G->6bit,B->5bit。转换的思路是取出原图的点,对每个采样进行运算。

(2)互转程序

#define RGB565_MASK_RED        0xF800  
#define RGB565_MASK_GREEN    0x07E0  
#define RGB565_MASK_BLUE       0x001F   
void rgb565_2_rgb24(BYTE *rgb24, WORD rgb565)    //把一个字的565数据转成3个分离的R ,G,B
{   
      //extract RGB   //分离出单独的RGB
      rgb24[2] = (rgb565 & RGB565_MASK_RED) >> 11;     
      rgb24[1] = (rgb565 & RGB565_MASK_GREEN) >> 5;  
      rgb24[0] = (rgb565 & RGB565_MASK_BLUE);  
 
      //amplify the image   //往高位移动填满单字节的8位
      rgb24[2] <<= 3;  
      rgb24[1] <<= 2;  
      rgb24[0] <<= 3;  

 

USHORT rgb24_2_rgb565(int r, int g, int b)   //应该会损失数据内容
{
        return (USHORT)(((unsigned(r) << 8) & 0xF800) |
            ((unsigned(g) << 3) & 0x7E0)  |
            ((unsigned(b) >> 3)));
}

(3)显式彩条测试画面

       如果在一个240X400分辨率的LCD屏幕上,设置三条竖彩带,分别是红绿蓝,以测试画面效果。程序如下:

void MainAddressSetting()
{
      U16 xx,yy;
      CpuMainWriteCom(0x0210);CpuMainWriteData(0x0000);    //X位置起始点
      CpuMainWriteCom(0x0211);CpuMainWriteData(0x00ef);     //X位置终结点
      CpuMainWriteCom(0x0212);CpuMainWriteData(0x0000);    //Y位置起始点
      CpuMainWriteCom(0x0213);CpuMainWriteData(0x018f);     //Y位置终结点
      CpuMainWriteCom(0x0200);CpuMainWriteData(0x0000);
      CpuMainWriteCom(0x0201);CpuMainWriteData(0x0000);    //GRAM ADDR SET     

      CpuMainWriteCom(0x0202);                                                 //GRAM WRITE START
      for(yy=0;yy<400;yy++)
      {
           for(xx=0;xx<80;xx++)                                 //xx应该只是表示点的个数,并不意味地址
                 CpuMainWriteData(0xf800)
           for(xx=0;xx<80;xx++)
                 CpuMainWriteData(0x7e0)
           for(xx=0;xx<80;xx++)
                 CpuMainWriteData(0x001f)
      }
}

 

参考原文:http://blog.csdn.net/nitghost/archive/2009/02/23/3925678.aspx

原创粉丝点击