2012-11-08 72 views
0

我在一個較低的水平,我不是很舒服已經:)製作純位圖結構BITMAPINFOHEADER感

反正工作掃描應用程序,我想弄明白數字我獲得。

這裏,我們去:

    200 DPI,B/W
  1. 決議
  2. 掃描Letter尺寸的文件來達到1700x2200
  3. 我計算1700x2200 = 3740000位或467500個字節
  4. 當我得到BITMAPINFOHEADER它說biSizeImage = 475200.爲什麼?
  5. 我用BITMAP返回字節數組的代碼片段返回475248個字節,這個字節多了48個字節。但是biSize說40,所以如果頭是40,那爲什麼48字節在圖像數據前面?

基本上,我不明白爲什麼計算467500和475200之間的區別是BITMAPHEADER?

我也不明白爲什麼標題說它是40字節,但實際上它是48?我只是猜測它是8字節的彩色信息?由於圖像是2色(B/W) - 每個顏色使用4個字節?

編輯

這裏是信息:

enter image description here

認爲我得到它。當掃描行保存在內存中時,必須包含4個字節。 因此,根據我的計算,1700位是212.5字節,根據我的看法 - 它使用216個字節。所以,這是有道理的。

+0

發佈圖片的文件共享服務,使每個人都可以檢查你的假設。 –

回答

1

BITMAPINFOHEADER確實是40字節大小。請記住,位圖由BITMAPINFO結構表示,而不是BITMAPINFOHEADER結構。 BITMAPINFOBITMAPINFOHEADER結構後立即包含可選的RGBQUAD調色板。

1700x2200將作爲位圖使用1位的像素,即,它是一單色位圖是374萬個像素,這將佔用467500個字節。您的位圖在標題和像素數據之間有一個額外的8個字節,並且與單色位圖一致,因爲調色板將包含2個RGBQUAD值。您必須考慮BITMAPINFOHEADER::biBitCount字段,因爲它會告訴您每個像素實際使用了多少位以及調色板的使用方式。

附加字節被佔由每個掃描線在端部填充到上DWORD邊界對齊。 biSizeImage在這種情況下,計算公式爲:

biWidth = 1700 
biCount = 1 
biHeight = 2200 
biSizeImage = ((((((biWidth * biCount) + 31)/32) * 32)/8) * biHeight) = 475200 
+0

是的,這部分很清楚。這是單色圖像。但爲什麼biSizeImage說我們都計算了475200而不是467500?如果我devide推測像素行 - 它高達212.5字節,我得到的實際大小是216個字節 – katit

+0

可以顯示所有的'BITMAPINFOHEADER'的其他值? –

+0

剛剛編輯了更多細節 – katit