GDI+中发生一般性错误的解决办法

System.Drawing.Image bmp = System.Drawing.Image.FromFile(path);

Bitmap imgSrc = new Bitmap(bmp.Width, bmp.Height); // 新建一个图像复制原图,然后进行各种操作。把原图关闭再保存覆盖原图。
Graphics gs = Graphics.FromImage(imgSrc);
gs.DrawImage(bmp, 0, 0);
bmp.Dispose();//避免 GDI+ 中发生一般性错误

imgSrc.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg);  //这个时候如是用 bmp对象保存就会引发 GDI+ 中发生一般性错误;

因为对象正在操作之中已经锁定,所以不能保存。新建一个内存图像,复制原图 进行操作后覆盖原图才是正解。

补充:

网上说有三个原因,1个是没有写入权限要赋予 NETWORK SERVICE 帐户以写入权限,2是图像被锁定,3是文件不存在。

本人在本地测试一切正常,发布到IIS 上就是报错。研究好了好久,终于发现,不是这程序的问题,是另外一个服务:

在使用了 Bitmap 对象操作后没有关闭,释放资源导致错误。在另外一个服务使用图像时 加上using 问题解决。

困扰了我一天。百思不得解,本地正常,就想着可能是权限问题,脑子转不过来。记录下来。

原文地址:https://www.cnblogs.com/90nice/p/3473322.html