欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

RGB565与RGB888颜色互相转换

最编程 2024-01-13 08:09:28
...

 在计算机中图像基本是以RGB888格式显示的,24位图每个像素保存了32bit的数据,即RGB888+Alpha,Alpha就是半透明填充字节。对于真彩的图像而言,肉眼在16bit的时候已经难以分辨了,有些时候,可以将RGB888转换为RGB565来存储,减少了存储器的容量的同时,降低了数据量;在显示的时候,再次把RGB565转换为RGB888,实现数据宽度的匹配。

    转换的思想:颜色的低位增加或者移除。

     (1)、RGB888->RGB565

    方法只要提取相应单色高位即可(R5 G6 B5),但会导致低位的缺失,影响精度,而且无法恢复。

     (2)、 RGB565->RGB888

    填充相应单色低位即可。

RGB888用unsigned int 32位字节存储

RGB565与RGB888颜色互相转换_java

RGB565用unsigned short 16位字节存储

RGB565与RGB888颜色互相转换_java_02    

 

示例代码:

 

/*函数功能: RGB565转RGB888高位对齐,低位补0*/u32 RGB565_TO_RGB888(u16 rgb565){    u8 r,g,b;    u32 rgb888=0;    r=(rgb565>>11)&0x1F;//  11 1111    g=(rgb565>>5)&0x3F;    b=(rgb565>>0)&0x1F;    rgb888=(r<<19)|(g<<10)|(b<<3);    return rgb888;}/*函数功能: RGB888转RGB565转换颜色去掉低位,高位保留*/u16 RGB888_TO_RGB565(u32 rgb888){    u8 r,g,b;    u16 rgb565=0;    r=rgb888>>16;    g=rgb888>>8;    b=rgb888>>0;    r>>=3; //分量5    g>>=2; //分量6    b>>=3; //分量5    rgb565=r<<11|g<<5|b<<0;    return rgb565;}