2015-11-02 87 views
0

我有一個.bmp文件理解.bmp文件

我有點理解,有點不明白。我知道前14個字節是我的Bitmapfileheader。我還明白,我的Bitmapinfoheader也包含有關位圖的信息,並且大約有40個字節(在版本3中)。

我不明白的是,信息如何存儲在那裏。 我有此圖像: enter image description here

爲什麼所有的顏色信息都存儲在「FF」中?我知道「00」是「垃圾字節」。我不明白的是爲什麼「FF」中有所有內容?

此外,我不明白是什麼類型的「編碼」是? 42 4D等於做「BM」。那是什麼?如何將我在那裏看到的內容翻譯成顏色或字母或數字?

我能在這種情況下閱讀:

BITMAPFILEHEADER

前2個字節。 BM如果它是.bmp文件:42 4D = BM(但是42 4D轉換爲BM)

Next 4字節:位圖的大小。 BA 01 00 00.不知道應該是多大。

Next 4字節:保留一些東西。

下一個4個字節:偏移(不太明白)

BITMAPINFOHEADER

下一個4個字節:該BITMAPINFOHEADER的大小。 6C 00 00 00在這裏。

Next 4字節:.bmp的寬度。 0A 00 00 00.我知道自從創建該文件後,它必須是10px。

Next 4字節:.bmp的高度。 0A 00 00 00.我知道自從創建該文件後,它必須是10px。

Next 2字節:來自其他文件格式的內容。

接下來的兩個字節:顏色深度。 18 00 00 00.我認爲只能通過1,2,4,8,16,24,32?

+0

'BMP'文件有不同的子格式。但是在標題中會有多少顏色等級的參數。您是否仔細研究了所有標題參數以及它們的含義,並且意味着如何表示其餘數據? – lurker

+0

@lurker我添加了一些信息 – Stophface

+0

字節排序是小尾數。所以'BA 01 00 00'是十六進制'000001BA',它是442(十進制)。任何代表大小或其他單一值(而不是像素)的多字節值都需要這樣解釋。第二個例子中的顏色深度是十六進制'00000018',它是24(十進制)位。在你的第二個例子中,頭部的大小是十六進制'0000006C',或者十進制的108. – lurker

回答

1

您看到「42 4D」的前兩個字節是我們所說的幻數。它們是文件的簽名,42 4d是二進制文件01000010 01001101的十六進制表示法。 每個文件都有一個,.jpg,.gif。你懂了。

這裏是一個圖像,說明一個54字節的BMP完整標題(24位BMP)。

BMP Header

的BMP的總大小是由報頭的大小計算+ BMP.width X BMP.height * 3(1個字節用於紅色,綠色1個字節,用於藍1個字節 - 在每通道8位信息的情況)+填充(如果存在)。

您參考垃圾字節,被填充,需要它們如果每個掃描線(行)的大小不4.

白色的以十六進制表示法如果ffffff的倍數,爲所述第一兩個紅色,綠色和藍色。 而在十進制表示法中,每個通道將具有值255,因爲2^8(8位)-1 = 255。

希望這會爲您清除一點(非意圖的雙關語)。