2014-09-19 51 views
0

我創建一個24位bmp,它一般工作正常(我一直在使用該功能一段時間)。現在我已經嘗試寫入970 x 970像素的bmp,​​並且最終以損壞的文件結尾(之前導出了更大的圖像,但遇到此特定分辨率的問題)。創建24位BMP失敗(只有一個特定的分辨率)

這是我建立的標題:

private static byte[] createHeader(int width, int height) { 
    int size = width * height * 3 + 54; 

    byte[] ret = new byte[54]; 

    set(ret, 0, (byte) 'B', (byte) 'M'); 
    set(ret, 2, intToDWord(size)); 
    set(ret, 6, intToDWord(0)); 
    set(ret, 10, intToDWord(54)); 
    set(ret, 14, intToDWord(40)); 
    set(ret, 18, intToDWord(width)); 
    set(ret, 22, intToDWord(height)); 
    set(ret, 26, intToWord(1)); 
    set(ret, 28, intToWord(24)); 
    set(ret, 30, intToDWord(0)); 
    set(ret, 34, intToDWord(width * height * 3)); 
    set(ret, 38, intToDWord(0)); 
    set(ret, 42, intToDWord(0)); 
    set(ret, 46, intToDWord(0)); 
    set(ret, 50, intToDWord(0)); 

    return ret; 
} 

這裏得到的圖像(本測試圖像應該是完全爲紅色): test_corrupt.bmp (2.6mb)

我已經分析了頭,檢查大小,我無法找到此圖像不是有效的BMP的原因。

有沒有人有線索?我沒有取得任何進展。

+0

如何定義'set','intToDWord'和'intToWord'方法? – 2014-09-19 15:17:01

回答

3

這可能是因爲BMP文件期望行長度爲4個字節的倍數。這改變了你在標題中指定的大小偏移34,因此在偏移大小2.請參閱詳細信息如下:

http://en.wikipedia.org/wiki/BMP_file_format

相關部分:

對於文件存儲的目的,只每行的大小必須是4個字節的倍數,而文件偏移量可以是任意的

您可以使用MS Paint創建970x970紅色BMP文件來比較文件。

+0

非常感謝!我完全錯過了這一點! – user1772710 2014-09-20 15:56:44

相關問題