转: RGB565、RGB888互相转换原理和代码
2015-12-01 10:35
621 查看
转:http://www.xuebuyuan.com/935987.html
背景:在我们的计算机中图像是以RGB888格式显示图像的,24位图每个像素保存了32bit的数据,即RGB888+Alpha,Alpha就是半透明填充字节……但是对于真彩的图像而言,肉眼在16bit的时候已经难以分辨了,因此,有些时候,可以讲RGB888转换为RGB565来存储,减少了存储器的容量的同时,降低了数据量;在后端显示的时候,再次把RGB565转换为RGB888,实现数据宽度的匹配!!
题记: 总的思想就是,低位增加或者移除。
一.RGB888->RGB565
方法只要提取相应单色高位即可(R5 G6 B5),但会导致低位的缺失,影响精度,而且无法恢复。
二.RGB565->RGB888
方法只要补充相应单色低位即可(R3 G2 B3)。
RGB888用unsigned int 32位字节存储
RGB565用unsigned short 16位字节存储
代码:
背景:在我们的计算机中图像是以RGB888格式显示图像的,24位图每个像素保存了32bit的数据,即RGB888+Alpha,Alpha就是半透明填充字节……但是对于真彩的图像而言,肉眼在16bit的时候已经难以分辨了,因此,有些时候,可以讲RGB888转换为RGB565来存储,减少了存储器的容量的同时,降低了数据量;在后端显示的时候,再次把RGB565转换为RGB888,实现数据宽度的匹配!!
题记: 总的思想就是,低位增加或者移除。
一.RGB888->RGB565
方法只要提取相应单色高位即可(R5 G6 B5),但会导致低位的缺失,影响精度,而且无法恢复。
二.RGB565->RGB888
方法只要补充相应单色低位即可(R3 G2 B3)。
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | R7 | R6 | R5 | R4 | R3 | R2 | R1 | R0 | G7 | G6 | G5 | G4 | G3 | G2 | G1 | G0 | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
R7 | R6 | R5 | R4 | R3 | G7 | G6 | G5 | G4 | G3 | G2 | B7 | B6 | B5 | B4 | B3 |
代码:
#define RGB888_RED 0x00ff0000 #define RGB888_GREEN 0x0000ff00 #define RGB888_BLUE 0x000000ff #define RGB565_RED 0xf800 #define RGB565_GREEN 0x07e0 #define RGB565_BLUE 0x001f unsigned short RGB888ToRGB565(unsigned int n888Color) { unsigned short n565Color = 0; // 获取RGB单色,并截取高位 unsigned char cRed = (n888Color & RGB888_RED) >> 19; unsigned char cGreen = (n888Color & RGB888_GREEN) >> 10; unsigned char cBlue = (n888Color & RGB888_BLUE) >> 3; // 连接 n565Color = (cRed << 11) + (cGreen << 5) + (cBlue << 0); return n565Color; } unsigned int RGB565ToRGB888(unsigned short n565Color) { unsigned int n888Color = 0; // 获取RGB单色,并填充低位 unsigned char cRed = (n565Color & RGB565_RED) >> 8; unsigned char cGreen = (n565Color & RGB565_GREEN) >> 3; unsigned char cBlue = (n565Color & RGB565_BLUE) << 3; // 连接 n888Color = (cRed << 16) + (cGreen << 8) + (cBlue << 0); return n888Color; }
相关文章推荐
- 基于php实现七牛抓取远程图片
- Java字符串性能优化
- Java系列:国际化(zz)
- The C++ Standard Library: Standard Exception Classes
- XIB混合代码来实现布局
- java虚拟机
- asp.net验证码注册
- Java数组/集合性能优化
- C++ REST SDK in Visual Studio 2013
- QT中PRO文件写法的详细介绍
- Version history of VC++, MFC and ATL
- 浅析Python编码问题
- 个人学习c++的真实经验!
- LibSVM 在matlab中的使用
- java设计模式之代理模式
- Eclipse插件开发中遇到的一些错误处理
- 个人学习php的真实经验!
- Python—OpenCV学习网站
- python单元测试框架nose的扩展nose-ittr支持传参测试
- 编程语言大牛王垠:编程的智慧,带你少走弯路