RGB565和RGB888的转换

(1)RGB565或RGB16格式说明

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


(2)RGB888或RGB24格式说明

RGB888彩色模式也称RGB24彩色模式,指的是用24位表示一个像素,即 一个像素占三个字节,

一般bitmap图片是一个RGB888,每个像素由3个字节组成,R->8bit,G->8bit,B->8bit;而RGB565

的每个pixels是由2字节组成,R->5bit,G->6bit,B->5bit。转换的思路是取出原图的点,对每个采样进行运算。

(3)互转程序

#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);

   }
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值