RGB色彩模式
众所周知,RGB三原色以及它们之间相互按不同比例叠加可以得到各种各样的颜色,包括白色和黑色,由此,RGB作为三原色从而形成了一套RGB色彩模式,这套色彩模式是工业界普遍运用的颜色标准,这个标准几乎涵盖了人类能感知到的所有色彩,是目前运用最为广泛的颜色系统之一。过去的电子屏幕分辨率显示方式普遍是RGB方式,屏幕上的任意一种色彩都可以由一组RGB值来表现。
RGB色彩原理
RGB是从颜色发光的原理来设计定的,通俗点说它的颜色混合方式就好像有红、绿、蓝三盏灯,当它们的光相互叠合的时候,色彩相混 ,而亮度却等于三者亮度之总和,越混合亮度越高,即加法混合。
红、绿、蓝三盏灯的叠加情况,中心三色最亮的叠加区为白色,加法混合的特点:越叠加越明亮。
红、绿、蓝三个颜色通道每种色各分为256阶亮度,在0时“灯”最弱——是关掉的,而在255时“灯”最亮。当三色灰度数值相同时,产生不同灰度值的灰色调,即三色灰度都为0时,是最暗的黑色调;三色灰度都为255时,是最亮的白色调。
RGB 颜色称为加成色,因为您通过将 R、G 和 B 添加在一起(即所有光线反射回眼睛)可产生白色。加成色用于照明光、电视和计算机显示器。例如,显示器通过红色、绿色和蓝色荧光粉发射光线产生颜色。绝大多数可视光谱都可表示为红、绿、蓝 (RGB) 三色光在不同比例和强度上的混合。这些颜色若发生重叠,则产生黄、青和紫。
RGB色彩格式
对一种颜色进行编码的方法统称为“颜色空间”或“色域”。用最简单的话说,世界上任何一种颜色的“颜色空间”都可定义成一个固定的数字或变量。RGB(红、绿、蓝)只是众多颜色空间的一种。采用这种编码方法,每种颜色都可用三个变量来表示-红色绿色以及蓝色的强度。记录及显示彩色图像时,RGB是最常见的一种方案。但是,它缺乏与早期黑白显示系统的良好兼容性。因此,许多电子电器厂商普遍采用的做法是,将RGB转换成YUV颜色空间,以维持兼容,再根据需要换回RGB格式,以便在电脑显示器上显示彩色图形。
RGB网页格式
由于网页(WEB)是基于计算机浏览器开发的媒体,所以颜色以光学颜色RGB(红、绿、蓝)为主。网页颜色是以16进制代码表示,一般格式为#DEFABC (字母范围从A-F,数字从0-9 );如黑色,在网页代码中便是:#000000(在css编写中可简写为#000)。当颜色代码为#AABB11时,可以简写为#AB1表示,如#135与#113355表示同样的颜色。
RGB1、RGB4、RGB8都是调色板类型的RGB格式,在描述这些媒体类型的格式细节时,通常会在BITMAPINFOHEADER数据结构后面跟着一个调色板(定义一系列颜色)。它们的图像数据并不是真正的颜色值,而是当前像素颜色值在调色板中的索引。以RGB1(2色位图)为例,比如它的调色板中定义的两种颜色值依次为0x000000(黑色)和0xFFFFFF(白色)…(每个像素用1位表示)表示对应各像素的颜色为:黑黑白白黑白黑白黑白白白…。
RGB555
RGB555是另一种16位的RGB格式,RGB分量都用5位表示(剩下的1位不用)。使用一个字读出一个像素后,这个字的各个位意义如下:
高字节 低字节
X R R R R R G G G G G B B B B B (X表示不用,可以忽略)
可以组合使用屏蔽字和移位操作来得到RGB各分量的值:

#define RGB555_MASK_RED 0x7C00
#define RGB555_MASK_GREEN 0x03E0
#define RGB555_MASK_BLUE 0x001F
R = (wPixel & RGB555_MASK_RED) >> 10; // 取值范围0-31
G = (wPixel & RGB555_MASK_GREEN) >> 5; // 取值范围0-31
B = wPixel & RGB555_MASK_BLUE; // 取值范围0-31

RGB565
RGB565使用16位表示一个像素,这16位中的5位用于R,6位用于G,5位用于B。程序中通常使用一个字(WORD,一个字等于两个字节)来操作一个像素。当读出一个像素后,这个字的各个位意义如下:
高字节 低字节
R R R R R G G G G G G B B B B B
可以组合使用屏蔽字和移位操作来得到RGB各分量的值:

#define RGB565_MASK_RED 0xF800
#define RGB565_MASK_GREEN 0x07E0
#define RGB565_MASK_BLUE 0x001F
R = (wPixel & RGB565_MASK_RED) >> 11; // 取值范围0-31
G = (wPixel & RGB565_MASK_GREEN) >> 5; // 取值范围0-63
B = wPixel & RGB565_MASK_BLUE; // 取值范围0-31
#define RGB(r,g,b) (unsigned int)( (r|0x08 << 11) | (g|0x08 << 6) | b|0x08 )
#define RGB(r,g,b) (unsigned int)( (r|0x08 << 10) | (g|0x08 << 5) | b|0x08 )

该代码可以解决24位与16位相互转换的问题
RGB24
RGB24使用24位来表示一个像素,RGB分量都用8位表示,取值范围为0-255。注意在内存中RGB各分量的排列顺序为:BGR BGR BGR…。通常可以使用RGBTRIPLE数据结构来操作一个像素,它的定义为:

typedef struct tagRGBTRIPLE {
BYTE rgbtBlue; // 蓝色分量
BYTE rgbtGreen; // 绿色分量
BYTE rgbtRed; // 红色分量
} RGBTRIPLE;

RGB32
RGB32使用32位来表示一个像素,RGB分量各用去8位,剩下的8位用作Alpha通道或者不用。(ARGB32就是带Alpha通道的RGB24。)注意在内存中RGB各分量的排列顺序为:BGRA BGRA BGRA…。通常可以使用RGBQUAD数据结构来操作一个像素,它的定义为:

typedef struct tagRGBQUAD {
BYTE rgbBlue; // 蓝色分量
BYTE rgbGreen; // 绿色分量
BYTE rgbRed; // 红色分量
BYTE rgbReserved; // 保留字节(用作Alpha通道或忽略)
} RGBQUAD;

YUV色彩模式
在 Windows 桌面属性外观中编辑颜色时,有 YUV 和 RGB 两种编辑方法。
但是RGB模式缺乏与早期黑白显示系统的良好兼容性,而YUV 主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。
与 RGB 视频信号传输相比,它最大的优点在于只需占用极少的频宽, RGB 要求三个独立的视频信号同时传输。
其中 “Y” 表示明亮度(Luminance 或 Luma),也就是灰阶值。
“U” 和 “V” 表示的则是色度(Chrominance 或 Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
“ 亮度 ” Y值是透过 RGB 输入信号来建立的,方法是将 RGB 信号的特定部分叠加到一起。
“ 色度 ” 则定义了颜色的两个方面 ─ 色调与饱和度,分别用 Cr 和 CB 来表示。
其中, Cr 反映了 GB 输入信号红色部分与 RGB 信号亮度值之间的差异。
而 CB 反映的是 RGB 输入信号蓝色部分与 RGB 信号亮度值之同的差异。
采用 YUV 色彩空间的重要性是它的亮度信号 Y 和色度信号 U 、 V 是分离的。如果只有 Y 信号分量而没有 U 、 V 分量,那么这样表示的图像就是黑白灰度图像。彩色电视采用 YUV 空间正是为了用亮度信号 Y 解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。
YUV 与 RGB 相互转换的公式如下( RGB 取值范围均为 0-255 )︰

Y = 0.299R + 0.587G + 0.114B
   U = -0.147R - 0.289G + 0.436B
   V = 0.615R - 0.515G - 0.100B
   R = Y + 1.14V
   G = Y - 0.39U - 0.58V
   B = Y + 2.03U
   在 DirectShow 中,常见的 RGB 格式有 RGB1 、 RGB4 、 RGB8 、 RGB565 、 RGB555 、 RGB24 、 RGB32 、 ARGB32 等;常见的 YUV 格式有 YUY2 、 YUYV 、 YVYU 、 UYVY 、 AYUV 、 Y41P 、 Y411 、 Y211 、 IF09 、 IYUV 、 YV12 、 YVU9 、 YUV411 、 YUV420 等。
主要的采样格式有 YCbCr 4:2:0 、 YCbCr 4:2:2 、 YCbCr 4:1:1 和 YCbCr 4:4:4 。其中 YCbCr 4:1:1 比较常用,其含义为:每个点保存一个 8bit 的亮度值 ( 也就是 Y 值 ) ,每 2x2 个点保存一个 Cr 和 Cb 值 , 图像在肉眼中的感觉不会起太大的变化。所以, 原来用 RGB(R , G , B 都是 8bit unsigned) 模型, 1 个点需要 8x3=24 bits (如下图第一个图),(全采样后, YUV 仍各占 8bit )。按 4:1:1 采样后,而现在平均仅需要 8+(8/4)+(8/4)=12bits ( 4 个点, 8*4 ( Y ) +8(U)+8(V)=48bits ) , 平均每个点占 12bits( 如下图第二个图 ) 。这样就把图像的数据压缩了一半。
上边仅给出了理论上的示例,在实际数据存储中是有可能是不同的,下面给出几种具体的存储形式:
YUV色彩格式
YUVFormats分成两个格式:
紧缩格式(packedformats):将Y、U、V值存储成MacroPixels数组,和RGB的存放方式类似。
平面格式(planarformats):将Y、U、V的三个分量分别存放在不同的矩阵中。
紧缩格式(packedformat)中的YUV是混合在一起的,对于YUV常见格式有AYUV格式(4:4:4采样、打包格式);YUY2、UYVY(采样、打包格式),有UYVY、YUYV等。平面格式(planarformats)是指每Y分量,U分量和V分量都是以独立的平面组织的,也就是说所有的U分量必须在Y分量后面,而V分量在所有的U分量后面,此一格式适用于采样(subsample)。平面格式(planarformat)有I420(4:2:0)、YV12、IYUV等。
( 1 ) YUV 4:4:4

YUV 三个信道的抽样率相同,因此在生成的图像里,每个象素的三个分量信息完整(每个分量通常 8 比特),经过 8 比特量化之后,未经压缩的每个像素占用 3 个字节。

下面的四个像素为 : [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

存放的码流为 : Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
( 2 ) YUV 4:2:2

每个色差信道的抽样率是亮度信道的一半,所以水平方向的色度抽样率只是 4:4:4 的一半。对非压缩的 8 比特量化的图像来说,每个由两个水平方向相邻的像素组成的宏像素需要占用 4 字节内存。

下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

存放的码流为: Y0 U0 Y1 V1 Y2 U2 Y3 V3

映射出像素点为: [Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]
( 3 ) YUV 4:1:1

4:1:1 的色度抽样,是在水平方向上对色度进行 4:1 抽样。对于低端用户和消费类产品这仍然是可以接受的。对非压缩的 8 比特量化的视频来说,每个由 4 个水平方向相邻的像素组成的宏像素需要占用 6 字节内存。

下面的四个像素为 : [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

存放的码流为 : Y0 U0 Y1 Y2 V2 Y3

映射出像素点为: [Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]

( 4 ) YUV4:2:0

4:2:0 并不意味着只有 Y , Cb 而没有 Cr 分量。它指得是对每行扫描线来说,只有一种色度分量以 2:1 的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是 4:2:0 的话,下一行就是 4:0:2 ,再下一行是 4:2:0… 以此类推。对每个色度分量来说,水平方向和竖直方向的抽样率都是 2:1 ,所以可以说色度的抽样率是 4:1 。对非压缩的 8 比特量化的视频来说,每个由 2x2 个 2 行 2 列相邻的像素组成的宏像素需要占用 6 字节内存。

下面八个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

[Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8 U8 V8]

存放的码流为: Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8

映射出的像素点为: [Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7]

[Y5 U0 V5] [Y6 U0 V5] [Y7U2 V7] [Y8 U2 V7]
  
RGBW技术
RGBW技术是在原有的RGB三原色上增加了W白色子像素,成为四色型像素设计,是sub pixel rendering技术方式。 在新的像素排布方式下色彩表现的一致性。同时大幅度提升了液晶面板的透光率,在显示相同亮度的画面时,其耗电量更低;而相同功耗的情况下,亮度大幅提高,这使得画面层次更加分明,画面更通透。
RGB和RGBW的优劣
1.RGBW是在RGB的基础上加入了白色子像素,成为四色型像素设计。所以RBGW比RGB的透光性更好,更亮。
2.RGBW在原有RGB三原色组成像素的基础上,再增加一个白色的子像素,形成RGBW四色像素。目的是为了提高LCD对能源的有效利用,在RGB三色Color Filter增加一个白色区域透过区域可以提高LCD对背光的利用率,增加LCD的显示亮度,降低LCD功耗。采用这种模式,带了的一个最大问题就是单色的纯度和饱和度会下降。
RGBW的优点
RGBW像素编码:
在原有RGB三原色组成像素的基础上,再增加一个白色的子像素,形成RGBW四色像素;按理说,增加一个白色的像素,会降低图像质量,但某些芯片厂商凭借本身的技术和信号处理能力可以在不损害图像质量的基础上提升灵敏度。
1.RGBW有更高的灵敏度,能够在低照度的室内或者夜晚获取到低噪点但画质高的图像。
2.在1.12um每个像素RGBW编码下,可以达到1.4um时RGB编码的信噪比;这样就是在更紧凑的芯片尺寸下实现更高的分辨率;

为什么RGBW排列比RGB排列分辨率更高相关推荐

  1. 荣耀9i 鸿蒙,荣耀9i和荣耀9青春版哪个好 哪个性价比更高?

    作为同样是搭载麒麟659处理器的两款手机,荣耀9i和荣耀9青春版自发布以来,就受到众多消费者的追捧,这两款手机也难免被用来比较.那么,荣耀9i和荣耀9青春版哪个好呢?哪个性价比更高?下面来详细了解一下 ...

  2. 像素排列 p(Pentile)排列 RGB 排列

    看到有不少兄弟纠结于i9000屏幕的"颗粒感"的,在这里我先说明一下,因为我原来是M8的用户,所以对屏幕显示效果比较敏感,i9000的颗粒感在我看来是很明显的--虽然绝大多数时候并 ...

  3. RGB排列和Pentile排列有什么区别

    RGB排列的屏幕用三原色调色,一个像素点一个颜色,所以清晰度高,显示细腻,好的IPS用RPG排列色彩还原度很真实. P排列,PenTiel是一种oled屏幕的像素排列方式,相对于标准RGB排列,Pen ...

  4. amoled led 排列_AMOLED屏幕为啥不用RGB排列?

    先简单介绍一下,AMOLED屏是英文Active-matrix organic light emitting diode的简写,拥有超高的色彩还原能力和色彩逼真程度,而能耗的降低与超薄的设计更是得众多 ...

  5. amoled led 排列_科普:为何AMOLED屏幕不用RGB排列

    科普:为何AMOLED屏幕不用RGB排列 先简单介绍一下,AMOLED屏是英文Active-matrix organic light emitting diode的简写,拥有超高的色彩还原能力和色彩逼 ...

  6. amoled led 排列_为何AMOLED屏幕不用RGB排列?

    OFweek显示网讯 AMOLED屏幕为什么不采用RGB排列呢? 先简单介绍一下,AMOLED屏是英文Active-matrix organic light emitting diode的简写,拥有超 ...

  7. 宝石排列 java_重新排列序列以最大化顺序差异,红宝石

    我有一个数组形式的有序序列 . 例如 original_order = [1,2,3,4,5,6,7,8,9,10] 我想知道如何根据原始顺序重新排序顺序,顺序的最大差异 . 具体来说,我想知道在运行 ...

  8. 蓝桥杯算法训练合集八 1.数的划分2.求先序排列3.平方计算4.三角形高5.单词复数

    目录 1.数的划分 2.求先序排列 3.平方计算 4.三角形高 5.单词复数 1.数的划分 问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种 ...

  9. 【组合数学】排列组合 ( 集合排列、分步处理示例 )

    文章目录 一.集合排列.分步处理示例 排列组合参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排列 | 组合 | 圆排列 | 二项式定理 ...

  10. 【组合数学】排列组合 ( 多重集排列 | 多重集全排列 | 多重集非全排列 所有元素重复度大于排列数 | 多重集非全排列 某些元素重复度小于排列数 )

    文章目录 一.多重集 二.多重集全排列 三.多重集全排列示例 三.多重集非全排列 1 所有元素重复度大于排列数 ( ni≥rn_i \geq rni​≥r ) 四.多重集非全排列 2 某些元素重复度小 ...

最新文章

  1. 「biáng biáng 面」马上可以打出来了!Unicode发布13.0版本,收录4939个生僻字
  2. Android自定义控制(五)仿新浪微博的下拉刷新
  3. 【ABAP】如何根据PR号删除PM单的组件
  4. Linux之cut:简化版的awk
  5. linux 2.6 hash表作用,高性能分布式哈希表FastDHT介绍及安装配置
  6. idea查看一个类的所有子类_java new一个对象的过程中发生了什么
  7. PHP系列(十三)PHP会话控制
  8. volatile双重锁实现单例
  9. Java高级编程之URL处理
  10. 5G NR标准协议架构-5G协议应该怎么看?
  11. top20万_主播收入榜(9.28)| 陌陌主播叶哥收入50万夺冠
  12. 注册表改win 7更新服务器,uefi安装win7卡在更新注册表设置解决新方法(完美解决)...
  13. 掌握一门计算机语言需要多长时间,学习一门语言需要多长时间?科学告诉你
  14. 民宿运营经验分享:玩转自我营销,带动流量持续增长
  15. Arduino与Proteus仿真实例-SHT7x温度湿度传感器驱动仿真
  16. 【悦读】《异类》:我们不一样?
  17. 店宝宝:是什么事情让各大巨头抢着做?
  18. OC与C语言的一些区别
  19. html5中密码要求有字母,转:正则表达式:密码必须至少包含八个字符、至少包含一个数字、小写和大写的字母以及特殊字符...
  20. 从燃油车布局新能源,汽车服务商们谋破局

热门文章

  1. 图片相似度对比在线测试,图片相似度对比 python
  2. 苹果6严重卡顿_苹果手机变慢变卡,怎么破?
  3. logback日志模板
  4. adb的环境搭建,下载和卸载app
  5. html如何定义mime类型的作用,自定义mime类型、mime类型介绍
  6. 坯子库无法一键安装插件没用_坯子插件库_SketchUp坯子库(su插件管理器)下载 v2018.3官方版 - 121下载站...
  7. SketchUp 8 Pro 安装插件 没有安装扩展程序按钮 rbz插件安装
  8. 使用计算机传真,使用计算机发送和接收传真
  9. 漫游书海-我的阅读简史
  10. CVX用户指南之求解器