为什么不会GDI让我删除大的图像?
-
20-09-2019 - |
题
我的ASP.NET应用具有图像裁剪和缩放功能。这需要上传的临时图像被删除。一切工作正常,但是当我试图通过80px删除图像比80px大,我得到一个“文件被其他进程锁定...”错误,即使我已经释放了所有资源。
这里的一个片段:
System.Drawing.Image tempimg = System.Drawing.Image.FromFile(temppath);
System.Drawing.Image img = (System.Drawing.Image) tempimg.Clone(); //advice from another forum
tempimg.Dispose();
img = resizeImage(img, 200, 200); //delete only works if it's 80, 80
img.Save(newpath);
img.Dispose();
File.Delete(temppath);
解决方案
我想你不设置分配给IMG变量第一图像实例。
考虑此来代替:
System.Drawing.Image tempimg = System.Drawing.Image.FromFile(temppath);
System.Drawing.Image img = (System.Drawing.Image) tempimg.Clone();
tempimg.Dispose();
System.Drawing.Image img2 = resizeImage(img, 200, 200);
img2.Save(newpath);
img2.Dispose();
img.Dispose();
File.Delete(temppath);
其他提示
如果你创建这个图片的方式,它不会被锁定:
using (FileStream fs = new FileStream(info.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
byte[] data = new byte[fs.Length];
int read = fs.Read(data, 0, (int)fs.Length);
MemoryStream ms = new MemoryStream(data, false);
return Image.FromStream(ms, false, false); // prevent GDI from holding image file open
}
不隶属于 StackOverflow