4) RGB24
RGB24 使用 24 位来表示一个像素,RGB 分量都用 8 位表示,取值范围为
0-255。注意在内存中 RGB 各分量的排列顺序为:BGR BGR BGR…。通常可以使
用 RGBTRIPLE 数据结构来操作一个像素,它的定义为:
typedef struct tagRGBTRIPLE {
BYTE rgbtBlue; // 蓝色分量
BYTE rgbtGreen; // 绿色分量
BYTE rgbtRed; // 红色分量
} RGBTRIPLE;
5) RGB32
RGB32 使用 32 位来表示一个像素,RGB 分量各用去 8 位,剩下的 8 位用作
Alpha 通道或者不用。(ARGB32 就是带 Alpha 通道的 RGB32。)注意在内存中 RGB
各分量的排列顺序为:BGRA BGRA BGRA…。通常可以使用 RGBQUAD 数据结构来
操作一个像素,它的定义为:
typedef struct tagRGBQUAD {
BYTE rgbBlue; // 蓝色分量
BYTE rgbGreen; // 绿色分量
BYTE rgbRed; // 红色分量
BYTE rgbReserved; // 保留字节(用作 Alpha 通道或忽略)
} RGBQUAD;
2 YUV 视频存储格式
2.1 YUV 概述
在现代彩色电视系统中,通常采用三管彩色摄像机或彩色 CCD 摄像机进行摄
像,然后把摄得的彩色图像信号经分色、分别放大校正后得到 RGB,再经过矩
阵变换电路得到亮度信号 Y 和两个色差信号 R-Y(即 U)、B-Y(即 V),最后
发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的
表示方法就是所谓的 YUV 色彩空间表示。
采用 YUV 色彩空间的重要性是它的亮度信号 Y 和色度信号 U、V 是分离的。
如果只有 Y 信号分量而没有 U、V 分量,那么这样表示的图像就是黑白灰度图像。
彩色电视采用 YUV 空间正是为了用亮度信号 Y 解决彩色电视机与黑白电视机的
兼容问题,使黑白电视机也能接收彩色电视信号。
本文讲述的格式全部使用每个像素位置 8 位的方式来编码 Y 频道(也称为
灯光频道),并使用每样例 8 位的方式来编码每个 U 或 V 色度样例。但是,
大多数 YUV 格式平均使用的每像素位数都少于 24 位,这是因为它们包含的 U
和 V 样例比 Y 样例要少。
注在本文中,U 一词相当于 Cb,V 一词相当于 Cr。
2.2 常见 YUV 的格式
在 DirectShow 中,常见的 YUV 格式有 YUY2、YUYV、YVYU、UYVY、AYUV、