【发布时间】:2018-12-09 11:01:24
【问题描述】:
我正在将一批 .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 后缀是有意保留的。这应该不是问题,因为在保存最终文件之前出现异常。)
【问题讨论】:
-
尝试保持您的第一个 using 块处于活动状态。可能是第一个位图的底层流正在关闭。
-
您需要使用 ImageFromFile。请参阅:stackoverflow.com/questions/1060442/png-to-bmp