下面分别介绍各种 RGB 格式。
¨RGB1、RGB4、RGB8 都是调色板类型的 RGB 格式,在描述这些媒体类型的格式细节时,通常会在 BITMAPINFOHEADER 数据结构后面跟着一个调色板(定义一系列颜色)。它们的图像数据并不是真正的颜色值,而是当前像素颜色值在调色板中的索引。以 RGB1(2 色位图)为例,比如它的调色板中定义的两种颜色值依次为 0x000000(黑色)和 0xFFFFFF(白色),那么图像数据 001101010111…(每个像素用 1 位表示)表示对应各像素的颜色为:黑黑白白黑白黑白黑白白白…。
¨ 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
¨ RGB555 是另一种 16 位的 RGB 格式,RGB 分量都用 5 位表示(剩下的 1 位不用)。使用一个字读出一个像素后,这个字的各个位意义如下:
高字节 低字节
X 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
¨ RGB24 使用 24 位来表示一个像素,RGB 分量都用 8 位表示,取值范围为 0-255。注意在内存中 RGB 各分量的排列顺序为:BGR BGR BGR…。通常可以使用 RGBTRIPLE 数据结构来操作一个像素,它的定义为:
typedef struct tagRGBTRIPLE {
BYTE rgbtBlue; // 蓝色分量
BYTE rgbtGreen; // 绿色分量
BYTE rgbtRed; // 红色分量
} RGBTRIPLE;
¨ RGB32 使用 32 位来表示一个像素,RGB 分量各用去 8 位,剩下的 8 位用作 Alpha 通道或者不用。(ARGB32 就是带 Alpha 通道的 RGB32。)注意在内存中 RGB 各分量的排列顺序为:BGRA BGRABGRA…。通常可以使用 RGBQUAD 数据结构来操作一个像素,它的定义为:
typedef struct tagRGBQUAD {
BYTE rgbBlue; // 蓝色分量
BYTE rgbGreen; // 绿色分量
BYTE rgbRed; // 红色分量
BYTE rgbReserved; // 保留字节(用作 Alpha 通道或忽略)
} RGBQUAD;
- ThinkPad x13 Gen1傲腾H10重装系统的麻烦(0)
- Win10系统电脑进入安全模式的四种方法,让你轻松应对各种问题(0)
- 【Python】修改Windows中 pip 的缓存位置与删除 pip 缓存(1)
- 记录问题解决的连接(0)
- Python 格式化输出 —— 小数转化为百分数(0)
- ThinkPad x13 Gen1傲腾H10重装系统的麻烦(0)
- Win10系统电脑进入安全模式的四种方法,让你轻松应对各种问题(0)
- 【Python】修改Windows中 pip 的缓存位置与删除 pip 缓存(1)
- 记录问题解决的连接(0)
- Python 格式化输出 —— 小数转化为百分数(0)