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 问题解决。
困扰了我一天。百思不得解,本地正常,就想着可能是权限问题,脑子转不过来。记录下来。