2013-02-01 70 views
0

我有一個彩色圖像,其行數爲479,列數爲638.我試圖將此圖像保存爲BMP文件。爲此,我首先使用CreateDIBSection,然後使用CreateDIBitmap。對於CreateDIBSection我需要將BITMAPINFOHEADER傳遞給該函數。這裏有兩個參數biWidthbiSizeImage。由於函數返回的內存應該是DWORD對齊的,並且638不是4的倍數,所以我應該將寬度作爲638還是640?假設我將638作爲寬度傳遞,函數返回的內存是638 x 479還是640 x 479?我的觀察是,它是640 x 479.在這種情況下,當我將文件保存爲BMP時,每行的末尾會出現一條2像素寬的黑色線條。我如何避免這種情況?如果有問題,我將通過biCompression作爲BI_RGB要傳遞給CreateDIBSection函數的參數

回答

0

您應該將實際寬度作爲位圖寬度傳遞。掃描線/步幅必須是雙字對齊的。這意味着在計算步長和內存緩衝區大小時,每行最多可以添加3個字節。

請注意,數據的實際寬度取決於每個像素的位數。如果你;使用32位像素,那麼它已經正確對齊。