【UI】像素颜色格式
目录
1、RGB 格式系列
格式详解
2、YCbCr格式系列
可视化理解色度抽样
3、对比
4、BCSH
5、JPEG图片压缩
1. 色彩空间转换与色度抽样 (Color Space Conversion & Chroma Subsampling)
2. 分块 (Tiling)
3. 离散余弦变换 (DCT - Discrete Cosine Transform)
4. 量化 (Quantization) - 有损压缩的核心
5. 熵编码 (Entropy Coding) - 无损压缩步骤
6、屏幕色差影响因素
Gamma参数
1、RGB 格式系列
RGB:通过混合红(Red)、绿(Green)、蓝(Blue)三种原光来构成所有颜色。这是显示器、传感器等硬件设备直接使用的模式。
格式详解
这类格式直接存储红、绿、蓝每个通道的数值。
格式 | 含义 | 每像素位数 (bpp) | 特点与用途 |
---|---|---|---|
RGB888 | 红、绿、蓝每个通道各用8位(1字节)表示。 | 24位 (3字节) | 真彩色。最常见的图片格式,能表示约1677万色(2²⁴)。无透明度通道。例如:一张1920x1080的图片约占用 |
ARGB8888 | 在RGB888基础上增加一个8位透明度通道Alpha(A)。 | 32位 (4字节) | 带透明度的真彩色。A通道表示像素的不透明度(0为完全透明,255为完全不透明)。常用于带UI元素、图标、图形层的合成。内存占用比RGB888高33%。 |
RGB565 | 红通道用5位,绿通道用6位,蓝通道用5位表示。 | 16位 (2字节) | 高彩色。一种压缩的RGB格式,用于极大节省内存(相比RGB888节省50%)。能表示65536色(2¹⁶),颜色数量较少,可能有轻微色带。广泛应用于嵌入式系统、微控制器和早期手机,因为对内存和带宽要求低。 |
2、YCbCr格式系列
YCbCr:将一个颜色信息分离为亮度(Luma, Y) 和色度(Chroma, Cb & Cr) 两部分。亮度Y代表黑白信息,决定了图像的清晰度和对比度。色度Cb和Cr代表颜色信息(蓝色差和红色差)。
这是YCbCr格式的核心优势。人眼对亮度细节(Y)的敏感度远高于对颜色细节(Cb, Cr)的敏感度。因此,为了节省带宽和存储空间,可以对色度信息进行“降采样”,即用更少的像素来存储颜色信息,而保持亮度的完整分辨率。这就是4:4:4
, 4:2:2
, 4:2:0
等表示法的由来。
这类格式存储亮度和色度信息,并可通过色度抽样大幅节省带宽(面向视频处理与压缩)。
格式(采样方式) | 含义 | 每像素位数 (约) | 特点与用途 |
---|---|---|---|
YCbCr444 | 无降采样。Y, Cb, Cr三个通道具有完全相同的分辨率。 | 24位 (3字节) | 质量最高,等同于RGB888的信息量。常用于视频制作母带、高质量图像编辑中间格式和无损压缩。带宽需求与RGB888相同。 |
YCbCr422 | 水平方向2:1降采样。每两个相邻的像素共享一组CbCr值。亮度Y仍保持完整分辨率。 | 16位 (2字节) | 质量很高,带宽需求比444降低33%。广泛应用于专业视频制作、SDI传输接口。 |
YCbCr420 | 水平与垂直方向均2:1降采样。每2x2的四个像素共享一组CbCr值。亮度Y保持完整分辨率。 | 12位 (1.5字节) | 最常用的格式。带宽需求比444降低50%。人眼几乎察觉不到与444的画质差异。是几乎所有主流视频编码标准(H.264, H.265, VP9, AV1)的默认或常用色彩格式,也是DVD、蓝光、网络视频(YouTube, Netflix)的基础。JPEG图片压缩等。 |
可视化理解色度抽样
想象一下一组 2x2 的像素块:
YCbCr444 (4:4:4) - 无损采样
[Y][Cb][Cr] [Y][Cb][Cr] [Y][Cb][Cr] [Y][Cb][Cr]
[Y][Cb][Cr] [Y][Cb][Cr] [Y][Cb][Cr] [Y][Cb][Cr]
每个像素都有自己独立的Y, Cb, Cr值。
YCbCr422 (4:2:2) - 水平抽样
第一和第二个像素共享一套CbCr,第三和第四个像素共享另一套CbCr。第二行同理。
[Y][Cb][Cr] [Y] [Y][Cb][Cr] [Y]
[Y] [Y][Cb][Cr] [Y] [Y][Cb][Cr]
YCbCr420 (4:2:0) - 水平与垂直抽样
[Y] [Y](加权平均
[Cb][Cr]) [Y] [Y](加权平均
[Cb][Cr])
[Y] [Y] [Y] [Y]
2x2区块所有像素共享同一套CbCr值。色度信息的分辨率在宽和高上都只有亮度信息的一半。
3、对比
特性 | RGB888 / ARGB8888 | RGB565 | YCbCr444 | YCbCr422 | YCbCr420 |
---|---|---|---|---|---|
主要用途 | 图像显示、UI绘制 | 嵌入式显示、节省内存 | 高质量视频制作 | 专业视频传输 | 视频编码、流媒体 |
带宽/内存 | 高 | 中 | 高 | 中 | 低 |
色彩保真度 | 最高 | 较低(色带) | 最高 | 很高 | 高(人眼难辨) |
是否含透明度 | ARGB有,RGB无 | 无 | 无 | 无 | 无 |
4、BCSH
Brightness(亮度)
Contrast(对比度)
Saturation(饱和度)
Hue(色调)
简单来说,这是一组用于在YCbCr和RGB色彩空间之间进行转换的函数,并且它们允许你指定转换所遵循的色彩标准(如BT.601或BT.709)。而 YCbCr2RGB和 RGB2YCbCr则是这个色彩处理模块中的核心转换功能。
函数 | 使用场景举例 |
---|---|
| 正确解码一部DVD电影或一个标清MPEG视频文件,使其在显示器上显示正常的颜色。 |
| 解码一张用BT.601系数的JPEG图片(大多数JPEG都属此类),在图片查看器中正常显示。 |
| 解码一部蓝光电影、一个高清H.264视频流或任何高清内容,以获得正确的颜色。 |
| 将一幅RGB图像转换为YCbCr格式,以便编码成标清MPEG-2视频DVD。 |
| 将一幅RGB图像转换为YCbCr格式,以便编码成高清H.264视频用于网络播放或蓝光制作。 |
5、JPEG图片压缩
1. 色彩空间转换与色度抽样 (Color Space Conversion & Chroma Subsampling)
动作:将图片从RGB色彩空间转换到YCbCr色彩空间。
目的:分离亮度和色度信息。人眼对亮度(Y)更敏感,对色度(Cb, Cr)不敏感。
压缩:随即对Cb和Cr通道进行YCbCr4:2:0降采样(注意,JPEG最常用的是4:2:0,而不是4:2:2)。这立即将色度数据量减少了50%,而画质几乎没有可视的损失。这是第一个有损压缩步骤。
2. 分块 (Tiling)
动作:将整个图像的每个分量(Y, Cb, Cr)分割成一个个8x8像素的小块。
目的:为后续的变换操作准备好单位。所有的压缩魔法都将发生在每一个这64个像素的小块上。
3. 离散余弦变换 (DCT - Discrete Cosine Transform)
动作:对每一个8x8块应用DCT数学变换。
目的:将图像信息从“空间域”转换到“频率域”。变换后,每个8x8块变成了一个8x8的频率系数矩阵。
左上角的系数是低频系数,代表了图像大致的轮廓和能量(最主要的信息)。
右下角的系数是高频系数,代表了图像的细节、边缘和噪声(次要的信息)。
压缩:此时并未压缩,只是将能量重新集中,为下一步最关键的有损压缩做准备。
4. 量化 (Quantization) - 有损压缩的核心
动作:将DCT变换后的频率系数矩阵除以一个量化矩阵,然后四舍五取整到整数。
目的:舍弃人眼不敏感的高频信息。量化矩阵是JPEG压缩的灵魂,它定义了不同频率分量的保留精度。通常,对高频分量使用较大的量化步长(除数更大),导致很多高频系数经过除法和取整后直接变为0。
压缩:这是最主要、最关键的有损压缩步骤。图像信息的丢失就发生在这里。压缩质量(Photoshop中的“质量”滑块从0到100)实际上就是在选择不同的量化矩阵:高质量使用较小的除数,保留更多系数;低质量使用较大的除数,产生更多的0。
5. 熵编码 (Entropy Coding) - 无损压缩步骤
经过量化后,矩阵中充满了0,尤其是右下部分。现在需要高效地编码这些数据。
之字形扫描 (Zig-zag Scan):
动作:将二维的8x8量化后系数矩阵按“之”字形顺序重新排列成一维序列。
目的:让序列中末尾的0连续地排列在一起,便于后续压缩。
差分编码 (DPCM on DC Coefficient):
动作:每个8x8块的第一个系数是DC系数(直流系数),代表块的平均亮度。它对相邻块的DC值之差进行编码,而不是直接编码值本身。
目的:因为相邻块的DC值通常很接近,差值很小,更容易压缩。
行程编码 (RLE on AC Coefficients):
动作:对AC系数(交流系数,即除了DC以外的63个系数)进行编码。它被编码为(零的个数, 下一个非零系数的数值)这样的形式。例如,序列 0, 0, 0, 12, 0, 0, 5, ...会被编码为 (3,12), (2,5), ...。
目的:高效地表示一长串的0。
霍夫曼编码 (Huffman Coding):
动作:对上述步骤产生的所有符号(DC差值和AC的(零的个数, 数值)对)使用霍夫曼编码表进行压缩。
目的:这是一种无损压缩,给出现频率高的符号分配短的二进制码,给出现频率低的符号分配长的二进制码,从而进一步减少总体积。
6、屏幕色差影响因素
Gamma参数
显示驱动IC中的Gamma参数,是一组用于校正“输入电压”与“屏幕亮度”之间非线性关系的值,其根本目的是让显示效果符合人眼感知,并补偿显示屏固有的物理特性。