从c#中的原始像素数据创建的位图不会在IE中显示

时间:2015-11-21 09:55:12

标签: c# internet-explorer bitmap header metadata

我从位图中提取原始RGB像素数据,将其存储在字节数组中,然后从该数组重新创建新的位图。它工作正常,图像在Chrome,Firefox中正确显示,但在IE中则无法显示。

我假设这是因为我没有写任何标题或元数据。油漆打开文件,但不是有趣的Photoshop,抱怨格式说"无法放置文件' Image.bmp'因为文件格式模块无法解析文件"。

我并不关心PS,但我确实需要它们在IE中显示,尽管几乎可以肯定它们的问题是由同一因素引起的。

我的问题是缺少信息阻止IE显示我的位图,以及如何在c#中添加它?

保存位图功能

public void SaveBitmap(byte[] array, int width, int height)
{
    // Create new bitmap
    Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);

    // Lock the bitmap for writing
    Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
    BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, bmp.PixelFormat);

    // Copy the RGB values into to the bitmap
    System.Runtime.InteropServices.Marshal.Copy(array, 0, bmpData.Scan0, array.Length);

    // Unlock the bits and save.
    bmp.UnlockBits(bmpData);
    bmp.Save("Image.bmp");
}

This是我的代码创建的示例图像。它是一个zip文件,因为有趣的是,如果我将图像上传到网络服务器,IE 可以显示它。好像服务器对文件执行某种处理,添加缺少的标题信息...

1 个答案:

答案 0 :(得分:2)

Image.Save(string)将图像保存为PNG,因此您创建了一个带有BMP文件扩展名的PNG图像。使用Image.Save(string, ImageFormat)指定格式如下:

bmp.Save("Image.bmp", ImageFormat.Bmp);