下面我将详细讲解如何通过UltraEdit解析BMP文件内部结构。
准备工作
- 下载安装UltraEdit
- 准备一张BMP格式的图片
解析过程
- 打开UltraEdit软件
- 打开BMP文件:
文件 > 打开
- 打开文件后,将光标移至字节流数据处,右键点击选择
Hex/ASCII
菜单,然后点击设置'#'注释符
。 - 在弹出的对话框中,选择
无
作为注释符
,点击确定
按钮。 - 此时,选中的字节流数据部分的内容将会被注释掉,方便我们查看BMP文件的内部结构。
- 通过在字节流数据区上双击,可在十六进制和ASCII码之间进行切换。注意,BMP文件头的字节顺序是小端序(低位字节在前,高位字节在后)。
- 接着,我们就可以根据BMP文件头的结构,依次解析出每个字段的含义和取值。
-
以Windows位图版本为例,Windows位图文件头的结构如下:
```
[BMP文件头]
bfType 2 字节类型,必须为“BM”,即0x424D(此处省略了海量注释)
bfSize 4 文件大小(字节)
bfReserved1 2 保留,必须为0
bfReserved2 2 保留,必须为0
bfOffBits 4 从文件头到实际位图数据的偏移字节数[位图信息头]
biSize 4 位图信息头的大小
biWidth 4 位图的宽度(像素)
biHeight 4 位图的高度(像素)
biPlanes 2 目标设备的级别,固定为1
biBitCount 2 每个像素所需的位数
biCompression 4 图像的压缩类型
biSizeImage 4 图像大小
biXPelsPerMeter 4 水平分辨率
biYPelsPerMeter 4 垂直分辨率
biClrUsed 4 实际使用的颜色表中的颜色数
biClrImportant 4 对图像显示有重要影响的颜色数
```
- 我们可以在字节流数据区中找到对应的字段,然后解析出其值。
示例说明
以一个30×30像素的24位深彩色BMP图片为例,通过UltraEdit解析其内部结构。解析过程如下:
- 打开UltraEdit软件,打开BMP文件。
- 将光标移至字节流数据处,右键点击选择
Hex/ASCII
菜单,然后点击设置'#'注释符
。 - 在弹出的对话框中,选择
无
作为注释符
,点击确定
按钮。 - 此时,选中的字节流数据部分的内容将会被注释掉,方便我们查看BMP文件的内部结构。
- 通过在字节流数据区上双击,可在十六进制和ASCII码之间进行切换。
-
开始逐步解析BMP文件内部结构,按照顺序解析不同的头部和数据的部分。
-
BMP文件头
42 4D 7E 00 00 00 00 00 00 00 36 00 00 00 28 00
00 00 1E 00 00 00 1E 00 00 00 01 00 18 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00- bfType为0x424D,表示这是Windows位图文件(BMP文件)。
- bfSize为158,表示整个BMP文件的大小为158字节。
- bfReserved1和bfReserved2均为0,表示保留字段的值。
- bfOffBits为54,表示从文件头到实际位图数据的偏移字节数为54字节。
-
位图信息头
28 00 00 00 1E 00 00 00 1E 00 00 00 01 00 18 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00- biSize为40,表示此信息头的大小为40字节。
- biWidth为30,表示该位图的宽度(像素)为30像素。
- biHeight为30,表示该位图的高度(像素)为30像素。
- biPlanes为1,表示目标设备的级别。
- biBitCount为24,即每个像素占用的字节数为24位(3字节,分别代表RGB三个颜色通道)。
- biCompression为0,表示该位图没有经过压缩。
- biSizeImage为900,表示图像大小为900字节(即30×30×24/8)。
- biXPelsPerMeter和biYPelsPerMeter均为0,表示分辨率为默认值。
- biClrUsed和biClrImportant均为0,表示该位图不使用调色板。
-
位图像素数据
```
FF FF FF C4 C3 C1 C4 C3 CA
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何通过UltraEdit解析BMP文件内部结构(BMP位图基础) - Python技术站