2011年03月04日 星期五 7:51

今天在REVIEW代码的时候,发现了这样一个宏定义:

#define COLOR_TO_MTK_COLOR_SIMUL(color) ((((color) >> 19) & 0x1f) << 11) \
                                            |((((color) >> 10) & 0x3f) << 5)  \
                                            |(((color) >> 3) & 0x1f)

大家知道这个宏是用来干什么的吗?

仔细分析后,原来就是实现了RGB888到RGB565的转换,查阅相关资料后,发现网络上有一篇牛人写的东东,在此和大家分享。

讲一下量化压缩与量化补偿吧

  在进行色彩格式转换的时候,经常会遇到色彩量化位数的改变,比如说从 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. 如果仍然有未填充的位,继续使用原始数据的低位进行循环补偿

  解释一下循环补偿的概念:

  8bit RGB332 -> 24bit RGB888 的转换

  8bit RGB332 R2 R1 R0 G2 G1 G0 B1 B0

  24bit RGB888 R2 R1 R0 0 0 0 0 0 G2 G1 G0 0 0 0 0 0 B1 B0 0 0 0 0 0 0

  24bit RGB888 R2 R1 R0 R2 R1 R0 0 0 G2 G1 G0 G2 G1 G0 0 0 B1 B0 B1 B0 0 0 0 0

  24bit RGB888 R2 R1 R0 R2 R1 R0 R2 R1 G2 G1 G0 G2 G1 G0 G2 G1 B1 B0 B1 B0 B1 B0 0 0

  24bit RGB888 R2 R1 R0 R2 R1 R0 R2 R1 G2 G1 G0 G2 G1 G0 G2 G1 B1 B0 B1 B0 B1 B0 B1 B0

  看了这个,应该明白则么回事了吧,其中B分量,进行了四轮的补偿,达到要求。

  量化补偿的必要性,从直觉上讲,我所提出的这种补偿方法是正确的(因为我并没有严格的去证明),进行这样的补偿,在做色彩各式转换的时候,能够明显的改善色彩效果,减少精度上的损失。

  对256色调色板模式的认识和应用,顺便讲一下这个,因为量化压缩和量化补偿刚好可以应用到调色板模式下。大家都知道,很早以前就有人提过出256色的标准调色板的概念(有的人又称之为抖动调色板或者万能调色板),其实这样的调色板并不神秘。256色中,一个像素点用8bit表示,那么如果采用 8bit RGB332 的格式,一切问题都可以想通,并且可以进行很好的处理了。对于每个 RGB332 的颜色,都可以使用量化补偿的做法,将其转换为 24bit RGB888 的颜色格式,然后将其设置为调色板即可。这样,实质上是将256色调色板模式,转换为了 8bit RGB332 的像素格式。这样的调色板方式,更加利于某些方面的处理,比如调色板匹配、Alpha混合等。由于采用了这样的方法,一个像素点的颜色值,与其实际的RGB颜色值,可以很方便的通过量化补偿的方法转换出来,然后就可以对各个颜色分量进行计算,计算完毕,再使用量化压缩的方法,就可以生成最终需要的颜色值。而所谓的调色板匹配的问题,当然也更加好解决了。关键是要把问题想通,把握事物的本质,才能找到简单而优美的解决问题的方法。

  以前我对标准调色板的认识也存在很多错误,导致在分析和解决问题上,没有能找到最好的方法。网上也有许多人写过有关256色模式下 Alpha Blending 的文章,但是都存在许多认识上的不足,导致最后给出的算法时间和空间的复杂度都太大。我也有过一篇有关256色Alpha混合的文章,但限于当时对事物的认知能力,因此现在看来以前的许多文章是惨不忍睹。大家都在进步,以后有机会再将新的认识写成文章,同大家分享。

转载颜色模式RGB888-RGB565相关推荐

  1. lab 颜色模式的生理原因 黄色, 洋红色 刺眼。 绿色,蓝色,不刺眼。

    hsb 颜色模式理解了. lab 颜色模式,都说是生理原因.没说是啥生理原因. 猜测:黄色, 洋红色 刺眼.   绿色,蓝色,不刺眼. https://blog.csdn.net/self_mind/ ...

  2. 【Android 应用开发】Paint 滤镜原理 之 颜色矩阵 ( 颜色模式 | 颜色通道 | 颜色矩阵 | 矩阵运算 | 矩阵乘法 | 矩阵加法 | 颜色矩阵深入解析 )

    文章目录 颜色模式 颜色通道 Android 中的颜色矩阵 矩阵乘法运算 滤镜中的矩阵乘法运算 矩阵加法运算 滤镜中的矩阵乘法运算 滤镜运算原理 ( 总结 ) 实际滤镜理论示例 颜色模式 颜色模式 : ...

  3. 深入理解CSS六种颜色模式

    前面的话 赏心悦目的颜色搭配让人感到舒服,修改元素颜色的功能让人趋之若鹜.但颜色规划不当,会让网站用户无所适从.颜色从<font color="">发展至今,保留了很多 ...

  4. [Win32] 窗体暗色模式, C++, WinForm, WPF 使用方法, 判断颜色模式, 响应颜色变更消息, 设置标题栏暗色.

    2023 年了, 如果咱写的程序还不支持暗色模式, 那就说不过去了. 判断是否是暗色模式 在 Windows 中判断当前系统的颜色模式是否是暗色, 可以通过查询注册表项来实现. 下面是 C++ 的示例 ...

  5. 计算机常用的颜色模式有,ps的颜色模式有哪些

    ps的颜色模式有哪些 目前,在图像文件中最常用的颜色模式主要有RGB颜色.CMYK颜色.Lab颜色.灰度模式.位图模式等.下面小编就来简要介绍一下各种颜色模式的特点. RGB模式 用红(R).绿(G) ...

  6. ps—Photoshop中八种颜色模式

    PS中颜色模式是一个非常重要的概念,只有了解不同的颜色模式,才能精确地描述,修改和处理色调. 菜单栏中执行"图像"|"模式"命令可以调出如下图的面板,选择颜色模 ...

  7. PS中的颜色模式,8位、16位、32位区别、以及背景内容的区别

    颜色模式 RGB模式:又称"真彩色模式",是电脑美工设计人员最熟悉的色彩模式.RGB模式是将红(Red).绿(Green).蓝(Blue)3种基本颜色进行颜色加法(加色法),配置出 ...

  8. 索引颜色图模式和LAB颜色模式区别

    索引颜色图模式和LAB颜色模式 索引颜色图模式 索引颜色图像是一幅用8位二进制数来描述的图像,即在整幅图像内最多只有28(即256色)种颜色,通常我们用于印刷的计算机图像是24位,共计1670万种颜色 ...

  9. 【PS】浅谈PS颜色模式-RGB模式

    在Photoshop的[拾色器]中我们通常看到几种颜色的表达方式,分别为HSB.LAB.RGB.CMYK,另外还有16进制的RGB颜色表示.由于RGB颜色模式经常使用,所以笔者先从RGB开始讲起,过程 ...

最新文章

  1. js中的装饰器执行顺序
  2. 美国防部用AI消除“战争迷雾”,机器人、无人机全上阵
  3. Android Studio2.2.3 通过JNI引用ffmpeg库小结
  4. 色彩缤纷的python(改变字体颜色及样式)
  5. 【遇到问题】ORA-27102 ORA-01034
  6. 用Python实现二叉树,完全二叉树和满二叉树
  7. TOAD连接Oracle数据库失败:OCI_INVALID_HANDLE解决
  8. macOS Big Sur 11.1更新了!苹果macOS Big Sur 11.1正式版发布
  9. STM32工作笔记0078---UCOSIII任务挂起和恢复
  10. 看大师讲解移动互联网前端开发流程
  11. 解读 AppStore 新功能:自定义产品页面和 A/B Test 工具
  12. HTML常用排版标签
  13. web中常见的敏感信息
  14. 【成电860考研】专业课考前划重点-学长课程音频转文字-用科大讯飞花钱买的-三万五千字
  15. 《黑客与画家》-1 为什么书呆子不受欢迎?
  16. 微信公众号文章链接正则校验
  17. 关于阿里飞天系统中分布式系统底层各服务的介绍
  18. npm run build:具体
  19. TOTP动态密码认证功能,让天下无贼!
  20. mybatis一级缓存、二级缓存以及集成EnCache、Redis,避免脏读

热门文章

  1. Element | DatePicker 日期选择器 区间设置默认值(当前月第一天到当天)
  2. 已知一个带有表头结点的单链表,结点结构为 data link 假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的 算法,查找链表中倒数第k个位置
  3. Dubbo源码解析(三)执行器 Invoker
  4. 前端用element-ui 完成分页
  5. python界面GUI设计、tkinter设计界面初步教程
  6. 耦合、解耦是什么?怎么做到解耦呢?
  7. 弄清楚这里所说的解耦是什么意思。
  8. iRate---一个跳转AppStore评分弹窗
  9. html5页面强制横屏,移动端如何让页面强制横屏
  10. 信号与系统-1-线性时不变系统