如何查找保存图像时出现 Generic GDI+ 错误的原因?

2023-12-11

有一个在加载和存储图像时可以使用很长时间的代码,我发现我有一张图像这打破了这段代码:

const string i1Path = @"c:\my\i1.jpg";
const string i2Path = @"c:\my\i2.jpg";

var i = Image.FromFile(i1Path);
i.Save(i2Path, ImageFormat.Jpeg);

例外的是:

发生 System.Runtime.InteropServices.ExternalException

GDI+ 中发生一般错误。

在 System.Drawing.Image.Save(字符串文件名,ImageCodecInfo 编码器,EncoderParameters 编码器参数)
在 System.Drawing.Image.Save(字符串文件名,ImageFormat 格式)
at ...

据我所知,图像没有什么特别的。它的大小约为 250 像素,可以在例如Windows 图像查看器或 Paint.NET:

enter image description here

(由于上面的图片上传到 Stack Overflow 后不再产生错误,所以我把原始图像在这里)

我发现,在调用Save method,正在使用零字节创建目标图像文件。

我真的不知道是什么原因导致了错误。

我的问题:

  • 您能想到有什么特殊的事情会阻碍 .NET 保存图像吗?
  • 除了恐慌之外,还有什么方法可以缩小此类错误的范围吗?

虽然我仍然没有找到保存图像时到底导致错误的原因,但我找到了一个解决方法:

const string i1Path = @"c:\my\i1.jpg";
const string i2Path = @"c:\my\i2.jpg";

var i = Image.FromFile(i1Path);

var i2 = new Bitmap(i);
i2.Save(i2Path, ImageFormat.Jpeg);

IE。通过将图像内部复制到Bitmap实例并保存此图像而不是原始图像,错误消失了。

我假设通过复制它,错误的部分导致了原始的Save对失败的调用正在被删除和/或规范化,从而使保存操作能够成功。

saved image i2.jpg

有趣的是,如此存储的图像在磁盘上的文件 (16 kB) 比其原始源 (26 kB) 小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何查找保存图像时出现 Generic GDI+ 错误的原因? 的相关文章

随机推荐