BMP文件结构由四个区块组成,分别是文件头区块、位图信息区块、索引色区块和颜色数据区块。
文件头共14个字节,位图信息块共40个字节;
颜色数据区块的字节长度=位图宽*位图高,如果是24位色,颜色数据区块的字节长度=位图宽*位图高*3,而且位图宽*3必须是4的倍数,不然自动不全;
一、文件头区块(14个字节)具体含义
字节地址 | 长度 | 说明 | 16进制示例 |
0-1 | 2 | BM-代表window的BMP | 42 4D |
2-9 | 8 | 文件总长度 | 56 4D |
10-13 | 4 | 颜色数据区块的起始地址(或文件头区块+位图信息区块+索引色区块) | 36 04 00 00 |
注:文件总长度=文件头区块+位图信息区块+索引色区块+颜色数据区块+2。
二、位图信息区块(40个字节)具体含义
字节地址 | 字节长度 | 说明 | 16进制示例值 |
0-3 | 4 | 位图信息区块的长度(常值:0X280,40) | 28 00 00 00 |
4-7 | 4 | 图像宽度 | B4 00 00 00 |
8-11 | 4 | 图像高度 | 68 00 00 00 |
12-13 | 2 | 颜色平面数 | 01 |
14-15 | 2 | 表示颜色的比特位数,一般为1,4,8,16,24,32 | 08 |
16-19 | 4 | 压缩比(0-不压缩) | 00 00 00 00 |
20-23 | 4 | 颜色数据的长度(位图宽*位图高 或 位图宽*位图高*3) | 20 49 00 00 |
24-27 | 4 | 水平分辨率(单位为米) | 00 00 00 00 |
28-31 | 4 | 垂直分辨率 | 00 00 00 00 |
32-35 | 4 | 颜色索引数 | 00 01 00 00 |
36-39 | 4 | 00 00 00 00 |
三、索引色区块
1、非24 位BMP
该区块长度一般为为1024,即256*4,但也可能是其他值,由文件头的10-13字节决定。
索引色区块里分别用RGBX四个字节表示一个索引颜色。X字节无意义。按存储顺序分别代表0-255色(也见过246色,根据图像不同而不同)。
2、24位BMP
该区块长度为0。
四、颜色数据区块
存储顺序:以左下角为原点,从左到右,从下到上。
1、非24位BMP
长度=宽*高,且宽必须是4的倍数,每个字节保存颜色的索引值:0-255,通过索引值再到索引色区块中取回RGB。
2、24位BMP
长度=宽*高*3,且宽*3必须是4的倍数,不然要补齐,故长度可能大于宽*3。每3个字节代表一个像素点的RGB。