1. 程式人生 > >BMP位圖格式的內存存儲格式

BMP位圖格式的內存存儲格式

需要 壓縮 sci 大小 調色板 bmp font 轉換 位圖

**********************************************************************************************************

2018-05-29 實驗室 晚上整理總結

參考博客:https://blog.csdn.net/q673327335/article/details/8432384

***********************************************************************************************************

BMP(全稱Bitmap)是Window操作系統中的標準圖像文件格式

可以分成兩類:設備相關位圖(DDB)和設備無關位圖(DIB),使用非常廣。

它采用位映射存儲格式,除了圖像深度可選以外,不采用其他任何壓縮,因此,BMP文件所占用的空間很大。BMP文件的圖像深度可選lbit、4bit、8bit及24bit。BMP文件存儲數據時,圖像的掃描方式是按從左到右、從下到上的順序。由於BMP文件格式是Windows環境中交換與圖有關的數據的一種標準,因此在Windows環境中運行的圖形圖像軟件都支持BMP圖像格式。

組成

  典型的BMP圖像文件由四部分組成:

  1:位圖頭文件數據結構,它包含BMP圖像文件的類型、顯示內容等信息;

  2:位圖信息數據結構,它包含有BMP圖像的寬、高、壓縮方法,以及定義顏色等信息;

  3:調色板,這個部分是可選的,有些位圖需要調色板,有些位圖比如真彩色圖(24位的BMP)就不需要調色板

  4:位圖數據,這部分的內容根據BMP位圖使用的位數不同而不同,在24位圖中直接使用RGB,而其他的小於24位的使用調色板中顏色索引值。

***********************************************************************************************************

1、彩色BMP圖片

54個字節的圖像頭文件 + width*height*3的圖像數據

數據排列方式:B G R(第一個像素點) B G R(第一個像素點) ... ... ...

2、灰度圖BMP

54字節的圖像頭文件 + 1024個字節的調色板 + width*height的數據

***********************************************************************************************************

可以用besnew軟件打開圖片,查看內部存儲格式

比如一張8192*2048的灰度圖(有1024的顏色表)

技術分享圖片

存儲格式: 低位 高位

1.位圖文件頭

0,1:42 4D 為位圖的標誌。如果轉換成 ASCII 碼的話就是 BM。

2-5:(01 00 04 36)H = 16,778,294(bytes),表示文件大小為16,778,294bytes,也可以通過查看文件大小信息知道。

6-9:(00 00 00 00)H為保留字。

10-13:(00 00 04 36)H = 1078D,文件起始位置標誌,表示文件從第54+1024=1078位開始。

2.位圖信息頭

14-17:(00 00 00 28)H = 40D,表示位圖信息頭的長度,即為40 bytes。

18-21:(00 00 20 00)H = 8192D,表示位圖寬度,即為8192 pixels。

22-25:(00 00 08 00)H = 2048D,表示位圖高度,即為2048 pixels。存儲方式為從最後一行先存,最後存第一行//高度值為負數,則表示存儲順序為從上到下

26-27:(00 01)H,表示設備級別

28-29:(00 08)H = 8D,表示位圖色彩級別,即為 8位灰度圖。

30-33:(00 00 00 00)H,表示壓縮類型,0表示不壓縮

34-37:(01 00 00 00)H = 16,777,216D,位圖陣列表字節數,即為921600 bytes。

38-41:(00 00 00 00)H,表示水平分辨率

42-45:(00 00 00 00)H,表示垂直分辨率

46-49:(00 00 01 00)H,表示位圖實際使用的顏色表中的顏色變址。

50-53:(00 00 00 00)H,表示位圖顯示過程中被認為重要顏色變址數。

3.顏色表

技術分享圖片

  顏色表用於說明(灰度圖)位圖中的顏色,它有若幹個表項,每一個表項是一個RGBQUAD類型的結構,定義一種顏色。RGBQUAD結構的定義如下:

  typedef struct tagRGBQUAD {

  BYTE rgbBlue;// 藍色的亮度(值範圍為0-255)

  BYTE rgbGreen; // 綠色的亮度(值範圍為0-255)

  BYTE rgbRed; // 紅色的亮度(值範圍為0-255)

  BYTE rgbReserved;// 保留,必須為0

  } RGBQUAD;

我們平時看到的偽彩色圖,可以對應著改變BGR的值,比如顏色表索引24,將BGR分別改為15,25,75等,就可以出現偽彩色圖。

4.像素存儲組織方式

BMP存儲像素值的方式為從下至上,從左至右,緊隨著文件頭存儲的字節為圖像最下一行的數值,從左下角開始依次存儲。

22 22 22 23 ... 為圖像左下角像素的數值,依次向右存儲,最後一行掃描完後,緊接著存儲上一行,最後一個byte存儲的是圖像右上角像素的數值。

可用MATLAB讀取BMP圖片後對比內存存放方式,就一目了然了。

BMP位圖格式的內存存儲格式