在 BMP 文件格式中,每个字节和位都有特定的含义。BMP 文件格式是一种位图图像文件格式,用于存储数字图像,尤其是在 Windows 操作系统中。以下是 BMP 文件格式的基本结构和每个部分的含义:
BMP 文件结构
BMP 文件结构通常分为以下几个部分:
- 文件头(Bitmap File Header):包含文件类型、文件大小、保留字段以及位图数据的偏移量。
- 信息头(Bitmap Info Header):包含位图的宽度、高度、颜色位数等信息。
- 颜色表(Color Table):(对于 1 位、4 位和 8 位的 BMP 文件)包含颜色的定义。
- 位图数据(Bitmap Data):实际的图像数据。
详细结构
1. 文件头(Bitmap File Header)
文件头固定为 14 字节,结构如下:
偏移量 | 大小 | 描述 |
---|---|---|
0 | 2 | 文件类型(通常为 'BM') |
2 | 4 | 文件大小(字节) |
6 | 2 | 保留字段1(通常为 0) |
8 | 2 | 保留字段2(通常为 0) |
10 | 4 | 位图数据的偏移量(字节) |
2. 信息头(Bitmap Info Header)
信息头大小可变,但最常见的是 40 字节,结构如下:
偏移量 | 大小 | 描述 |
---|---|---|
0 | 4 | 信息头大小(字节,通常为 40) |
4 | 4 | 图像宽度(像素) |
8 | 4 | 图像高度(像素) |
12 | 2 | 颜色平面数(总是 1) |
14 | 2 | 每像素位数(1、4、8、16、24、32) |
16 | 4 | 压缩方式(0=不压缩) |
20 | 4 | 图像大小(字节,可能为 0) |
24 | 4 | 水平分辨率(像素/米) |
28 | 4 | 垂直分辨率(像素/米) |
32 | 4 | 使用的颜色数(0=使用所有颜色) |
36 | 4 | 重要颜色数(0=所有颜色都重要) |
3. 颜色表(Color Table)
颜色表用于 1 位、4 位和 8 位 BMP 图像,每个颜色包含 4 字节(蓝色、绿色、红色和保留字节)。颜色表的大小取决于每像素的位数:
- 1 位图像:最多 2 个颜色条目
- 4 位图像:最多 16 个颜色条目
- 8 位图像:最多 256 个颜色条目
4. 位图数据(Bitmap Data)
位图数据是实际的图像像素值,根据每像素位数的不同,其表示方式也不同:
- 1 位:每个像素用 1 位表示(0 或 1),每字节包含 8 个像素。
- 4 位:每个像素用 4 位表示(0-15),每字节包含 2 个像素。
- 8 位:每个像素用 8 位(1 字节)表示。
- 16 位:每个像素用 16 位(2 字节)表示。
- 24 位:每个像素用 24 位(3 字节)表示,分别为蓝色、绿色和红色。
- 32 位:每个像素用 32 位(4 字节)表示,分别为蓝色、绿色、红色和保留字节(或透明度)。
示例
假设我们有一个 24 位的 BMP 文件,图像的宽度为 3 像素,高度为 2 像素。BMP 文件的部分内容可能如下:
- 文件头:14 字节
- 信息头:40 字节
- 位图数据:3 像素宽 * 2 像素高 * 3 字节/像素 = 18 字节
位图数据的详细表示:
- 第一行(从下到上):蓝色(00)、绿色(FF)、红色(00),蓝色(00)、绿色(00)、红色(FF),蓝色(FF)、绿色(00)、红色(00)
- 第二行(从下到上):蓝色(FF)、绿色(FF)、红色(00),蓝色(00)、绿色(FF)、红色(FF),蓝色(FF)、绿色(FF)、红色(FF)
BMP 文件示意图
<TEXT>
文件头: 'BM' 36 00 00 00 00 00 00 00 36 00 00 00 信息头: 28 00 00 00 03 00 00 00 02 00 00 00 01 00 18 00 00 00 00 00 18 00 00 00 13 0B 00 00 13 0B 00 00 00 00 00 00 00 00 00 00 位图数据: FF FF 00 FF 00 00 00 FF FF FF FF 00 00 FF 00 00 00 FF
通过了解 BMP 文件的结构和每个字节的含义,你可以解析和生成 BMP 文件。根据需要,可以进一步深入研究 BMP 文件的其他变种和压缩格式。