C# 图片资源无法释放问题

最近在用C#做图片编辑功能时候,遇到一个很奇怪的问题。

由于需要对电脑本地图片修改后进行保存,所以采用最简单的方法,就是把图片加载到PictureBox,编辑之后调用Image类的Save方法直接覆盖原文件保存。这种方法在XP系统及管理权限用户登录的Win7系统上都正常,后来在普通权限用户登录的Win7系统上出现“A generic error occurred in GDI+”的错误。经过跟踪调试,确定是在Image类的Save方法进行覆盖式保存时出错。后来换了一种折衷的实现方法,就是在覆盖保存时,先把原文件删除,然后把Image中的图像按原路径保存。这方法不会出现前面的GDI+错误,但在删除原文件时却出现“The process cannot access the file 'x:\xx.jpg' because it is being used by another process.”。相关代码如下:

 Image Src_Pic = Image.FromFile(fileName);
 bgBMP = new Bitmap((Image)Src_Pic.Clone());
 Src_Pic.Dispose();
在这里已经把原文件的Image对象Src_Pic释放掉,只是把其数据填充到Bitmap对象中,按道理应该不会出现在删除对应文件时出现资源无法访问的问题。估计调用的Clone方法还是关联到原文件路径。(我是C#新手,研究还不够深,只能暂时猜测哈)

后来再找了个折衷方法,手动实现"Clone"。部分代码如下:

Image Src_Pic = Image.FromFile(fileName);
bgBMP = new Bitmap(Src_Pic.Width, Src_Pic.Height);
Graphics g = Graphics.FromImage(bgBMP);
g.DrawImage(Src_Pic, new Rectangle(0, 0, Src_Pic.Width, Src_Pic.Height));
Src_Pic.Dispose();
这次再删除原文件就不会出现无法释放的问题了。

以上观点可能有错误,欢迎大家讨论指出。

你可能感兴趣的:(C#开发)