";在GDI+“”中发生了一个一般性错误;尝试使用图像时.拯救

本文关键字:错误 一般性 一个 拯救 图像 GDI+ quot 发生了 | 更新日期: 2023-09-27 17:58:57

我正在开发Outlook 2010外接程序,并从序列化的XML文件加载图像。图像加载良好,并且能够将其分配给Winform上的pictureBox对象,这没有问题。对象保存在中

[XmlIgnore]
public Bitmap Image
{
   get { return this.templateImage; }
   set { this.templateImage = value; }
 }

当,我试图将物理文件保存到硬盘上,然而,我正在做:

string filePath = Path.Combine(dirPath, item.Id + ".jpg");
try
{
    item.Image.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (Exception e)
{
    Debug.WriteLine("DEBUG::LoadImages()::Error attempting to create image::" + e.Message);
}

并且在GDI+中出现一个一般性错误。我已经检查了文件夹的写入权限,它确实有写入权限。我不确定这里出了什么问题。我还将ImageFormat更改为bmp和png等等,看看这是否是转换问题。。。但事实并非如此。有人建议试试吗?

";在GDI+“”中发生了一个一般性错误;尝试使用图像时.拯救

感谢Simon Whitehead在评论中的回答。他说:"3)确保文件没有被其他任何东西(包括你的代码)使用。"

所以问题是我自己的代码在使用这个项目。Image对象,并阻止GDI+对其调用dispose()方法。解决方案是将该对象复制到一个新对象中,然后使用该对象进行"写入"。结果代码如下:

try
{
   using (Bitmap tempImage = new Bitmap(item.Image)) 
   {
      tempImage.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);
   }    
}
catch (Exception e)
{
    Debug.WriteLine("DEBUG::LoadImages()::Error attempting to create image::" + e.Message);
}

我也面临代码行相同的错误:

wmImg.Save(BrandImgPath,ImageFormat.Png);
BrandImgPath = "D:/XYZ/fileName;

发现原因:

D:驱动器中不存在XYZ文件夹。所以我的代码稍后会创建这个文件夹。应该确保该路径是否存在。

if (Directory.Exists(@"D:/XYZ")) return;

希望它能帮助某人解决他的代码错误。


1.确保您的目标文件夹具有读/写权限(检查两次!)
2.使用服务器。MapPath更好
3.确保目标驱动器或文件夹上有可用空间。4.大多数时候,我们不能在共享服务器上使用内存流媒体,所以我们应该确保提供商允许我们使用它。

希望微软给出详细的异常错误,而不是"通用GDI+错误"!!!

如果我自己有这个问题,需要检查文件夹是否存在,GDI没有告诉我哪里出了问题,那就太好了。

在我的情况下,我保存图像的目录的路径有拼写错误:

if (Directory.Exists(directory_path))
{
 image.SaveAs(directory_path + filename);
}

正如gafflack所说,如果GDI+抛出了更多信息异常,那就太好了。

我遇到了同样的一般性异常,但随后我在并行plesk文件管理器上向IIS授予了写权限。如果您在windows服务器上,请确保将写入权限授予IIS用户,该用户是我的服务器中的IIS_IUSR

还要确保您试图保存的文件夹是正确的,如上面的评论

中所述