有一个在加载和存储图像时可以使用很长时间的代码,我发现我有一张图像这打破了这段代码:
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](https://i.stack.imgur.com/qm3l3.jpg)
(由于上面的图片上传到 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](https://i.stack.imgur.com/23ZmS.jpg)
有趣的是,如此存储的图像在磁盘上的文件 (16 kB) 比其原始源 (26 kB) 小。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)