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值,这将根据图像信息头中的位深度值来决定。


0 0
原创粉丝点击