BMP文件格式表

BMP文件格式表

地狱门神(F.R.C.)整理

概述:BMP文件大家都知道是什么东西,但是网上虽然有很多讲到BMP格式的文章,但都不是很全,所以我整理了这个比较全的BMP文件格式表,其中指出了一些不再使用的参数。

数据区

数据块

数据

数据类型

长度

描述

样例数据

Header DA

Info DB

Identifier

String

2

标志符

424D(BM)

File Size

Int32

4

文件大小

931F0000

Reserved

Int32

4

为0

00000000

Bitmap Data Offset

Int32

4

从文件开始到位图数据开始之间的偏移量

FE050000

Bitmap Header Size

Int32

4

位图信息头的长度,固定为0x28

28000000

Width

Int32

4

位图的宽度

70000000

Height

Int32

4

位图的高度

6F000000

Planes

Int16

2

位图位面数,固定为1

0100

Bits Per Pixel

Int16

2

每个像素的位数,色深
1 - Monochrome bitmap
4 - 16 color bitmap
8 - 256 color bitmap
16 - 16bit (high color) bitmap
24 - 24bit (true color) bitmap
32 - 32bit (true color) bitmap

0800

Compression

Int32

4

压缩方法:
0 - none (也使用BI_RGB表示)
1 - RLE 8-bit / pixel (也使用BI_RLE8表示)
2 - RLE 4-bit / pixel (也使用BI_RLE4表示)
3 - Bitfields (也使用BI_BITFIELDS表示)

01000000

Bitmap Data Size

Int32

4

位图数据的字节数。必须是4的倍数

00000000

HResolution

Int32

4

水平分辨率,不用,固定为0

00000000

VResolution

Int32

4

垂直分辨率,不用,固定为0

00000000

Colors

Int32

4

位图颜色数,不用,固定为0

00000000

Important Colors

Int32

4

重要颜色数,不用,固定为0

00000000

Palette DB

Color

Int32

4

蓝、绿、红各8位,高8位当色深为32时为Alpha值,否则固定为0

0C040C00

当色深为1、4、8时才有,数量为2^Bits Per Pixel

Mask DB

Red Mask

Int32

4

红色的掩码

00F80000

Green Mask

Int32

4

绿色的掩码

E0070000

Blue Mask

Int32

4

蓝色的掩码

1F000000

Reserved

Int32

4

固定为0

00000000

当色深为16时才有,此时Compression应为3

Data DA

Bitmap DB

 

Byte

不定

位图数据,大小与色深和压缩方法有关

 

 

注意:

1、所有的整数数据类型都是little-endian的。

2、压缩方法:

① BI_RLE8:每个像素为8位的RLE压缩编码,可使用编码方式和绝对方式中的任何一种进行压缩,这两种方式可在同一幅图中的任何地方使用。

编码方式:由2个字节组成,第一个字节指定使用相同颜色的像素数目,第二个字节指定使用的颜色索引。此外,这个字节对中的第一个字节可设置为0,联合使用第二个字节的值表示:

  • 第二个字节的值为0:行的结束。
  • 第二个字节的值为1:图像结束。
  • 第二个字节的值为2:其后的两个字节表示下一个像素从当前开始的水平和垂直位置的偏移量。

绝对方式:第一个字节设置为0,而第二个字节设置为0x03~0xFF之间的一个值。在这种方式中,第二个字节表示跟在这个字节后面的字节数,每个字节包含单个像素的颜色索引。压缩数据格式需要字边界(word boundary)对齐。

[例1] 用十六进制表示的8位压缩图像数据如下:

03 04 05 06 00 03 45 56 67 00 02 78 00 02 05 01 02 78 00 00 09 1E 00 01
这些压缩数据可解释为 :

 

压缩数据

扩展数据

03 04 04 04 04
05 06 06 06 06 06 06
00 03 45 56 67 00 45 56 67
02 78 78 78
00 02 05 01 从当前位置右移5个位置后向下移一行
02 78 78 78
00 00 行结束
09 1E 1E 1E 1E 1E 1E 1E 1E 1E 1E
00 01 RLE编码图像结束

 

② BI_RLE4:每个像素为4位的RLE压缩编码,同样也可使用编码方式和绝对方式中的任何一种进行压缩,这两种方式也可在同一幅图中的任何地方使用。这两种方式是:

编码方式:由2个字节组成,第一个字节指定像素数目,第二个字节包含两种颜色索引,一个在高4位,另一个在低4位。第一个像素使用高4位的颜色索引,第二个使用低4位的颜色索引,第3个使用高4位的颜色索引,依此类推。

绝对方式:这个字节对中的第一个字节设置为0,第二个字节包含有颜色索引数,其后续字节包含有颜色索引,颜色索引存放在该字节的高、低4位中,一个颜色索引对应一个像素。此外,BI_RLE4也同样联合使用第二个字节中的值表示:

  • 第二个字节的值为0:行的结束。
  • 第二个字节的值为1:图像结束。
  • 第二个字节的值为2:其后的两个字节表示下一个像素从当前开始的水平和垂直位置的偏移量。

[例2] 用十六进制数表示的4位压缩图像数据:

03 04 05 06 00 06 45 56 67 00 04 78 00 02 05 01 04 78 00 00 09 1E 00 01

这些压缩数据可解释为 :

 

压缩数据

扩展数据

03 04 0 4 0
05 06 0 6 0 6 0
00 06 45 56 67 00 4 5 5 6 6 7
04 78 7 8 7 8
00 02 05 01 从当前位置右移5个位置后向下移一行
04 78 7 8 7 8
00 00 行结束
09 1E 1 E 1 E 1 E 1 E 1
00 01 RLE图像结束

③ BI_BITFIELDS:这其实不是一种压缩算法,但是它描述了16位色深位图的存储格式,通常有两种,即红5位、绿6位、蓝5位的r5g6b5和红5位、绿5位、蓝5位的r5g5b5。它们的掩码如下表。

掩码

r5g6b5

r5g5b5

红色

00F80000

00007C00

绿色

E0070000

E0030000

蓝色

1F000000

1F000000

3、位图数据:

每个像素按照从下到上从左到右的顺序排列。

对于没有使用BI_RLE8或BI_RLE4的位图,每一行的数据字节数必须按4对齐,不足部分一般补0。

对于色深为1、4的位图,每个字节的高位表示的像素比低位靠左。对于色深为24的位图,每个象素的3个字节按蓝绿红的顺序排列。对于色深为32的位图,每个象素的4个字节按蓝绿红Alpha的顺序排列。

 

参考:

[1]《多媒体技术基础及应用》6.1 BMP文件格式,林福宗,http://mti.xidian.edu.cn/multimedia/multi/course1-6-1.html

[2]BMP格式图像文件详析,Homects,http://my.opera.com/homec/blog/show.dml/330587

[3]BMP图象格式,http://dev.gameres.com/Program/Visual/Other/BMPFormat.htm

posted @ 2007-02-02 17:05  地狱门神  阅读(1780)  评论(0编辑  收藏  举报