BMP文件格式分析

將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值,這將根據圖像信息頭中的位深度值來決定。


發佈了35 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章