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;
  }
 }
}

 

RGB565RGB888是一种将16位的RGB565格式换为24位的RGB888格式的方法。在RGB565格式中,每个像素占据16位,其中5位用于表示红色通道,6位用于表示绿色通道,5位用于表示蓝色通道。而在RGB888格式中,每个像素占据24位,其中8位用于表示红色通道,8位用于表示绿色通道,8位用于表示蓝色通道。 具体的换方法如下: 1. 对于RGB565RGB888,可以按照以下步骤进行换: - 取RGB565中的高5位作为换后的RGB888的红色通道的高8位。 - 取RGB565中的高6位右移2位作为换后的RGB888的绿色通道的高8位。 - 取RGB565中的低5位左移3位作为换后的RGB888的蓝色通道的高8位。 - 将上述结果填充到RGB888的对应通道中。 2. 对于RGB888RGB565,可以按照以下步骤进行换: - 取RGB888中的红色通道的高5位作为换后的RGB565的高5位。 - 取RGB888中的绿色通道的高6位右移3位作为换后的RGB565的低6位。 - 取RGB888中的蓝色通道的高5位左移3位作为换后的RGB565的低5位。 - 将上述结果填充到RGB565的对应通道中。 这样,就可以完成RGB565RGB888和RGB888到RGB565换。 #### 引用[.reference_title] - *1* *2* [libjpeg库的简单使用,rgb565rgb888互转,以及色块的寻找](https://blog.csdn.net/caijiwyj/article/details/103412220)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [RGB565RGB888的相互转换](https://blog.csdn.net/happy08god/article/details/10516871)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值