如何找到保存图像时出现通用 GDI+ 错误的原因?

46

我有一个能够长期加载和存储图像的代码,但我发现只有一张图片会导致代码出错:

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(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)
at System.Drawing.Image.Save(String filename, ImageFormat format)
at ...

就我所看到的,这张图片没有任何特别之处。它大约有250像素大小,并且可以在Windows图像查看器或Paint.NET中打开:

enter image description here

(由于上面的图片上传到Stack Overflow后不再产生错误,因此我放了原始图片的链接)

我发现调用Save方法时,目标图像文件会被创建为零字节。

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

我的问题:

  • 您能想到任何特殊的事情会阻止.NET保存图片吗?
  • 除了恐慌外,还有什么方法可以缩小这些错误的范围吗?

4
MSDN指出,从流中加载的位图要求该流在位图存在期间保持存在。 - Jesse Chisholm
3
与您的问题无关:但是如果路径不存在,会发生相同的异常(花了我一些时间才发现我打错了)。这可能会帮助其他人。 - Jürgen Steinblock
11个回答

0

在程序中打开

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

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

var i = Image.FromFile(i1Path);

i.Save(i2Path, ImageFormat.Jpeg);

i.Dispose();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接