BMP文件格式分析
来源:互联网 发布:powershell解析域名 编辑:程序博客网 时间:2024/05/19 19:32
将BMP文件以16进制形式打开可看见如下内容:
OFFSET
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000
00000010
00000020
00000030
00000040
*
*
*
*
*
00038420
00038430
42 4D 36 84 03 00 00 00 00 00 36 00 00 00 28 00
00 00 40 01 00 00 F0 00 00 00 01 00 18 00 00 00
00 00 00 84 03 00 D7 0D 00 00 D7 0D 00 00 00 00
00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF
依照下表的格式分析BMP文件的数据,可知上表中数据的意义:
位置
名称
大小
(Bytes)
值
含义
0x00000000
文件标识
2
0x42 0x4D (BM)
两字节的内容用来识别位图的类型:
BM : Windows 3.1x, 95, …
BA :OS/2 Bitmap Array
CI:OS/2 Color Icon
CP :OS/2 Color Pointer
IC: OS/2 Icon
PT :OS/2 Pointer
注:因为OS/2系统并没有被普及开,所以在编程时,你只需判断第一个标识BM就行。
0x00000002
File Size
4
0x00038436
用字节表示的整个文件的大小(小端格式)
0x00000006
Reserved
4
0x00000000
保留,必须设置为0
0x0000000A
Bitmap Data Offset
4
0x00000036
文件开始到位图数据的偏移
(0x00000000~0x00000036)
0x0000000E
Bitmap Header Size
4
0x00000028
位图信息头的长度,用来描述位图的颜色、压缩方法等。下面的长度表示:
0x28 – Windows 3.1.x,95,NT ,…
0x0C – OS/2 1.x
0x0F – OS/2 2.x
注:在windows95、98、2000等操作系统中,位图信息头的长度并不一定是0x28,因为微软已经制定出了新的BMP文件格式。其中的信息头结构变化比较大,长度加长。所以最好不要直接使用常数0x28,而是应该从具体的文件中读取这个值。这样才能确保程序的兼容性。
0x00000012
Width
4
0x00000140
位图的宽度,以像素为单位
0x00000016
Height
4
0x000000F0
位图的高度,以像素为单位
0x0000001A
Planes
2
0x0001
位图的位面数(注:该值总是1)
0x0000001C
Bits Per Pixel
2
0x0018
每个像素的位数
1 – 单色位图(实际上可有两种颜色,缺省情况下是黑色和白色。你可以自己定义这两种颜色)
4 – 16色位图
8 – 256色位图
16 – 16bit高彩色位图
24 – 24bit真彩色位图
32 – 32bit增强型真彩色位图
0x0000001E
Compression
4
0x00000000
压缩说明:
0 – 不压缩(使用BI_RGB表示)
1 – RLE 8 使用8位RLE压缩方式(使用BI_RGB8表示)
2 - RLE 4 使用4位RLE压缩方式(使用BI_RGB4表示)
3 – Bitfields 位域存放方式(用BI_BITFIELDS表示)
0x00000022
Bitmap Data Size
4
0x00038400
用字节数表示的位图数据的大小。该数必须是4的倍数
0x00000026
HResolution
4
0x00000DD7
用像素/米表示的水平fenbianlv
0x0000002A
VResolution
4
0x00000DD7
用像素/米表示的垂直fenbianlv
0x0000002E
Colors
4
0x00000000
位图使用的颜色数
0x00000032
Important Colors
4
0x00000000
制定重要的颜色数。当该值等于颜色数时(或者等于0时),表示所有颜色都一样重要
根据BMP版本的不同而不同
Palette
N*4bytes
调色板规范。对于调色板中的每个表项,这4个字节用下述方法描述RGB的值:
1字节用于蓝色分量
1字节用于绿色分量
1字节用于红色分量
1字节用于填充符(设置为0)
根据BMP版本及调色板尺寸的不同而不同
Bitmap Data
xxx bytes
该域的大小取决于压缩方法及图像的尺寸和图像的位深度,它包含所有的位图数据字节,这些数据可能是彩色调色板的索引号,也可能是实际的RGB值,这将根据图像信息头中的位深度值来决定。
- BMP文件格式分析
- BMP文件格式分析
- BMP文件格式分析
- BMP文件格式分析
- BMP文件格式分析
- BMP文件格式分析
- zt BMP 文件格式分析
- BMP文件格式分析
- BMP文件格式分析
- BMP文件格式分析
- BMP文件格式分析
- bmp文件格式分析
- BMP文件格式分析
- BMP文件格式分析
- BMP文件格式分析
- BMP文件格式分析
- BMP文件格式分析
- BMP文件格式分析
- CUDA并行编程入门
- 改用C++生成自动化数据表
- Android组件——创建DrawerLayout导航
- mac 环境变量
- Android新的menu实现——ActionMode
- BMP文件格式分析
- 评《深入理解计算机系统》
- Android中的Fragment使用详解之页面加载
- FNDCPASS Troubleshooting Guide For Login and Changing Applications Passwords
- 解决ora-01652无法通过128(在temp表空间中)扩展temp段的过程
- 网址URL中特殊字符转义编码
- ABAP 运算符
- Spark Streaming 和 Flume-NG的整合
- LINQ to Entities 实现sql 关键字"In"方式总结