1. 图像格式的江湖:YUV与RGB的恩怨情仇
第一次接触图像格式时,我被NV21、NV12这些字母数字组合搞得头晕眼花。直到有次调试Android相机预览,画面出现诡异的绿色条纹,才意识到这些格式选择直接影响着内存占用和渲染效率。举个实际例子:Android Camera2 API默认输出的NV21格式,在1080p分辨率下每帧需要占用3.1MB内存,而同样分辨率的RGBA8888却要8.3MB——这就是YUV的魔力。
YUV家族采用亮度(Y)与色度(UV)分离的存储方式,源自模拟电视时代兼容黑白/彩色电视的智慧。现代数字图像处理中,这种分离带来两大优势:一是允许对色度信息进行子采样(如4:2:0),在几乎不损失视觉质量的前提下减少带宽;二是方便视频编解码器直接处理。而RGB家族(包括RGBA、RGBX8888)则是图形渲染管线的"母语",GPU对其有原生优化,但每个像素必须完整存储所有颜色分量。
关键差异对比表:
| 特性 | YUV420系列(NV21/NV12/YV12) | RGB888 | RGBA8888 |
|---|---|---|---|
| 单像素位宽 | 12bit(实际平均) | 24bit | 32bit |
| 内存布局 | 平面/半平面 | 紧密打包 | 紧密打包 |
| 适用场景 | 视频采集/编解码 | 图形渲染 | 透明合成 |
| 采样率 | 4:2:0 | 4:4:4 | 4:4:4:4 |
262



被折叠的 条评论
为什么被折叠?



