将.bmp保存为.png到MemoryStream时出现ExternalException

时间:2018-06-30 13:39:09

标签: c# image stream

我正在将一批.bmp转换为.png。这是代码的相关部分:

foreach (string path in files) {
    using (fs = new FileStream(path, FileMode.Open)) bmp = new Bitmap(fs);

    using (ms = new MemoryStream()) {
        bmp.Save(ms, ImageFormat.Png);
        bmp.Dispose();

        png = Image.FromStream(ms);
    }

    png.Save(path);
}

bmp.Save(ms, ImageFormat.Png);行,抛出以下异常:

  

System.Runtime.InteropServices.ExternalException:“ GDI +中发生一般错误。”

根据MSDN,这意味着图像以错误的格式保存或保存到读取的位置。后者并非如此。但是,我看不出如何给它错误的格式:在同一MSDN页面上,给出了一个示例,其中.bmp以相同的方式转换为.gif。

与我保存到MemoryStream是否有关?这样做是为了使我可以用转换后的文件覆盖原始文件。 (请注意,.bmp后缀是有意保留的。这不应该是问题,因为在保存最终文件之前会出现异常。)

1 个答案:

答案 0 :(得分:1)

在该Bitmap constructor的MSDN文档中说:

  

在位图的整个生命周期中,必须保持流打开。

,同样的评论可以在Image.FromStream上找到。

因此,您的代码应仔细处理用于每个位图/图像的流的范围和生存期。

结合以下所有代码可以正确处理这些流:

col-md-2