RGB24互转RGB565


RGB24互转RGB565

widthheight为图像的高和宽

24bit RGB888 -> 16bit RGB565 的转换

24ibt RGB888 R7 R6 R5 R4 R3 R2 R1 R0 G7 G6 G5 G4 G3 G2 G1 G0B7 B6 B5 B4 B3 B2 B1 B0

16bit RGB565 R7 R6 R5 R4 R3 G7 G6 G5 G4 G3 G2B7 B6 B5 B4 B3

//rgb24 = (unsignedchar*)malloc(width*3);
//rgb16 = (unsigned short*)malloc(width*height*2);
static void rgb24_to_rgb565(__u8 *rgb24, __u8 *rgb16)
{
 int i = 0, j = 0;
 for (i = 0; i < width*height*3; i += 3)
    {
        rgb16[j] = rgb24[i] >> 3; // B
        rgb16[j] |= ((rgb24[i+1] & 0x1C) << 3); // G
        rgb16[j+1] = rgb24[i+2] & 0xF8;// R
        rgb16[j+1] |= (rgb24[i+1] >>5); // G
        j += 2;
    }
}

 

16bit RGB565 -> 24bit RGB888 的转换

16bit RGB565 R4 R3 R2 R1 R0 G5 G4 G3 G2 G1 G0B4 B3 B2 B1 B0

24ibt RGB888 R4 R3 R2 R1 R0 R2 R1 R0 G5 G4 G3 G2 G1 G0 G1 G0B4 B3 B2 B1 B0 B2 B1 B0

//rgb24 = (unsignedchar*)malloc(width*3);
//rgb16 = (unsigned short*)malloc(width*height*2);
static void rgb565_to_rgb24(__u8 *rgb16, __u8 *rgb24)
{
 int x = 0, y = 0;
 /* RGB565 -> RGB888, compress */
 for (y = 0; y < height; y++)
 {
  for (x = 0; x < width; x++)
  {
   *(rgb24 + x*3+0) = ((*(rgb16 + y*width + x) & 0xf800)>> 8) & 0xff;
   *(rgb24 + x*3+1) = ((*(rgb16 + y*width + x) & 0x07e0)>> 3) & 0xff;
   *(rgb24 + x*3+2) = ((*(rgb16 + y*width + x) & 0x001f) << 3) & 0xff;
  }
 }
}

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值