2014-09-19 54 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

相关问题