RGB565,RGB555, RGB888,RGB32转换

转载 2013年12月06日 08:28:52

关于RGB565,RGB555, RGB888,RGB32的转换,在我的前一篇博文中我已经介绍过了关于RGB565->RGB888的步骤和思想。
   今天上午又研究了一个上午,就谢了下来,希望能给需要帮助的哥们一点小小指导,当然了..也期待着高手过来拍砖。
关于RGB的一点介绍:
RGB色彩模式(也翻译为“红绿蓝”,比较少用)是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得
到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。
RGB语法:
( red,green,blue )    参数red:integer类型,指定颜色中的红色分量强度,有效值在0到255之间;green:integer类型,指定颜色中的绿色分量
强度,有效值在0到255之间;blue:integer类型,指定颜色中的蓝色分量强度,有效值在0到255之间返回值Long。函数执行成功时返回由指定分量确定的颜色,
用长整数表示。发生错误时返回-1。如果任何参数的值为NULL,RGB()函数返回NULL。   用法RGB()函数使用下述公式计算表示颜色的长整数:
65536 *Blue + 256 * Green+Red其中,Blue代表蓝色分量,Green代表绿色分量,Red代表红色分量。各分量中,数值越小,亮度越低,数值越大,亮度越高。

   下面就言归正传了:就RGB各种不同位数的存储方式在我的博客http://3417300.blog.51cto.com/3407300/860523中可以找到,在这我就不再累赘了。
就RGB888->RGB565而言:其转换的具体思路如下:(注:只代表个人的方法)
1.取RGB888中第一个字节的高5位作为转换后的RGB565的第二个字节的高5位
2.取RGB888中第二个字节的高3位作为转换后的RGB565第二个字节的低3位
3.取RGB888中第二个字节的第4--6位,作为转换后的RGB565第一个字节的高3位
4.取RGB888中第二个字节的第三个字节的高5位作为转换后的RGB565第一个字节的低5位
就RGB565->RGB888而言:
RGB565的存储方式为:
R4 R3 R2 R1 R0 G5 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0
1.取RGB565第一个字节中低5位作为RGB888的高5位
2.取RGB565第二个字节中的低3位,将其左移5位,作为RGB888第二个字节的高5位
3.取RGB565第一个字节的高3位将其右移3位,作为RGB888第二个字节的4--6位
4.取RGB565第二个字节中的高5位作为RGB888第三个字节。

细心地哥们一定会发现如果我们是低位往高位上转的话,就存在一些数据精度的丢失问题,在网上查了写资料,借鉴了一下别人的方法;所谓的量化补偿,
讲一下量化压缩与量化补偿吧

 在进行色彩格式转换的时候,经常会遇到色彩量化位数的改变,比如说从 24bit RGB888 到 16bit RGB565 的色彩转换。所谓量化压缩与量化补偿都是我个人所提出的概念,现说明如下。
量化压缩,举例:
 24bit RGB888 -> 16bit RGB565 的转换
24ibt RGB888 R7 R6 R5 R4 R3 R2 R1 R0 G7 G6 G5 G4 G3 G2 G1 G0 B7 B6 B5 B4 B3 B2 B1 B0
16bit RGB656 R7 R6 R5 R4 R3 G7 G6 G5 G4 G3 G2 B7 B6 B5 B4 B3
量化位数从8bit到5bit或6bit,取原8bit的高位,量化上做了压缩,却损失了精度。
量化补偿,举例:
16bit RGB565 -> 24bit RGB888 的转换
16bit RGB656 R4 R3 R2 R1 R0 G5 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0
24ibt RGB888 R4 R3 R2 R1 R0 0 0 0 G5 G4 G3 G2 G1 G0 0 0 B4 B3 B2 B1 B0 0 0 0
24ibt RGB888 R4 R3 R2 R1 R0 R2 R1 R0 G5 G4 G3 G2 G1 G0 G1 G0 B4 B3 B2 B1 B0 B2 B1 B0
说明:第二行的 24bit RGB888 数据为转换后,未进行补偿的数据,在精度上会有损失
第三行的 24bit RGB888 数据为经过量化补偿的数据,对低位做了量化补偿
可以很容易的证明,这样的补偿方法是一种合理的线性补偿。补偿的原理很简单,大家仔细想一下就明白了,因此不再详细说明。
总结一下:
量化压缩的方法:三个字取高位
量化补偿的方法:
1. 将原数据填充至高位
2. 对于低位,用原始数据的低位进行补偿
3. 如果仍然有未填充的位,继续使用原始数据的低位进行循环补偿

本文出自 “驿落黄昏” 博客,请务必保留此出处http://yiluohuanghun.blog.51cto.com/3407300/860798

bmp文件格式中rgb555与rgb888之间的转换,24位与16位位图的转换

教科书和各种网络文章中介绍的bmp文件格式中,通常仅仅对8位和24位的图像进行详细介绍,本文对16位rgb555模式的bmp文件存储结构进行了详细分析和测试,给出了24位彩色bmp文件转换为16位rg...
  • swimmingfish2004
  • swimmingfish2004
  • 2015年07月11日 20:38
  • 6365

rgb24转rgb555/rgb565优化

 真彩色转成高彩色的快速算法         -----------------------------------------------------------------------------...
  • eddygong
  • eddygong
  • 2008年12月24日 13:43
  • 3477

RGB565,RGB555, RGB888,RGB32转换

关于RGB565,RGB555, RGB888,RGB32的转换,在我的前一篇博文中我已经介绍过了关于RGB565->RGB888的步骤和思想。    今天上午又研究了一个上午,就谢了下来,希望能给...
  • u010606097
  • u010606097
  • 2013年12月06日 08:28
  • 2201

从零开始学习音视频编程技术(十五) YUV420P转RGB32

原文地址:http://blog.yundiantech.com/?log=blog&id=19 上一节讲解了YUV420P格式的内容。 我说过,我们不是为了做研究。 平白无故讲了YUV420P的...
  • qq214517703
  • qq214517703
  • 2016年09月30日 10:20
  • 2157

C++ 海康 YV12转RGB32,YV420转RGB32

bool YV12_to_RGB32(unsigned char* pYV12, unsigned char* pRGB32, int iWidth, int iHeight) { if (!...
  • baiyfcu
  • baiyfcu
  • 2016年07月15日 11:55
  • 981

RGB32

 BitmapData 存储的像素数据并不是各通道(ARGB)的原始数据,而是 RGB 跟 Alpha 通道相乘后的数据。在调用 BitmapData.getPixel32() 方法时,Flas...
  • cr2066
  • cr2066
  • 2016年06月29日 16:38
  • 189

【随笔】32位RGB转换为16位的RGB,优化%

gameloft 有道笔试题是这样的: 有32位的RGB色彩,保存方式如下: RED = 0X00FF0000;    GREEN = 0X0000FF00;        BULE= 0X00000...
  • timothy721
  • timothy721
  • 2013年04月21日 14:17
  • 2184

v4l2文档第五A--颜色与格式

颜色与格式这是不定期发布的关于写视频驱动程序的LWN系统文章的第五篇.没有看过介绍篇的,也许想从这里开始. 应用在可以使视频设备工作之前,它必须与驱动达成了解,知道视频数据是何种格式的。这种...
  • pengjin1985
  • pengjin1985
  • 2012年05月07日 16:09
  • 1229

RGB565转RGB888

在arm板上cmos得到的图象格式是RGB565格式,而在opencv上处理的格式是的BGR888。 RGB565用两个字节来存一个像素点,其中三个通道分别占5个,6个,5个位。 BGR888用三个字...
  • u010314269
  • u010314269
  • 2014年12月11日 16:18
  • 1163

16位bmp文件中RGB555转RGB565算法

做tft彩屏显示图片的时候,显示16位位图,显示屏的显示模式为RGB565。使用img2lcd转换后的16位bmp,显示出来后,颜色有偏差;转换为565格式的bin文件,显示完全正常,可以确定转换为b...
  • linfei2707
  • linfei2707
  • 2011年12月12日 12:48
  • 4065
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:RGB565,RGB555, RGB888,RGB32转换
举报原因:
原因补充:

(最多只允许输入30个字)