检查过好多次,发现是修改图片宽度的函数问题,不运行它只运行降低图片质量的函数就可以删除。。修改图片宽度的函数PercentImage()及部分代码如下,请高手帮我看看要怎么才能真正关闭占用去删除呢?谢谢
iSource = PercentImage(iSource);
//删除原图片文件
iSource.Dispose();
File.Delete(dirPath);
/// <summary>
/// 改变图片大小
/// </summary>
/// <param name="srcImage"></param>
/// <returns></returns>
public static Bitmap PercentImage(System.Drawing.Image srcImage)
{
int newW = srcImage.Width < 1800 ? srcImage.Width : 1800;
int newH = int.Parse(Math.Round(srcImage.Height * (double)newW / srcImage.Width).ToString());
try
{
Bitmap b = new Bitmap(newW, newH);
Graphics g = Graphics.FromImage(b);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default;
g.DrawImage(srcImage, new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, srcImage.Width, srcImage.Height), GraphicsUnit.Pixel);
g.Dispose();
return b;
}
catch (Exception)
{
return null;
}
}
6 个解决方案
#1
记得把srcImage.Dispose()
#2
可以试试,处理原图后"另存为"新文件.然后删除原文件
另外,上传图片处理时,应该是在内存中的,没存放到本地所以处理完之后保存就可以了,因为不存在"原文件"
另外,上传图片处理时,应该是在内存中的,没存放到本地所以处理完之后保存就可以了,因为不存在"原文件"
#3
g.DrawImage(srcImage.clone(), new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, srcImage.Width, srcImage.Height), GraphicsUnit.Pixel);
再把你的srcImage释放掉吧。。。
再把你的srcImage释放掉吧。。。
#4
原图片不能删除不是因为绑Graphics了,而是你打开图片的方式,打开文件时用文件流的方式转化为System.Drawing.Image就可以删除了!主要你打开图片是直接打开的图片文件,后来没有关闭他,所以删除不掉
#5
上传或是更新,建议均先放在一个临时目录中,然后处理。
日后再创建一个删除动作,定时删除昨天或以前的临时文件。
http://www.cnblogs.com/insus/archive/2009/04/08/1431986.html
http://www.cnblogs.com/insus/archive/2011/03/17/1986723.html
日后再创建一个删除动作,定时删除昨天或以前的临时文件。
http://www.cnblogs.com/insus/archive/2009/04/08/1431986.html
http://www.cnblogs.com/insus/archive/2011/03/17/1986723.html
#6
按1楼的方法解决了,原来就是忘记关闭了。。十分感谢各位热心解答!
#1
记得把srcImage.Dispose()
#2
可以试试,处理原图后"另存为"新文件.然后删除原文件
另外,上传图片处理时,应该是在内存中的,没存放到本地所以处理完之后保存就可以了,因为不存在"原文件"
另外,上传图片处理时,应该是在内存中的,没存放到本地所以处理完之后保存就可以了,因为不存在"原文件"
#3
g.DrawImage(srcImage.clone(), new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, srcImage.Width, srcImage.Height), GraphicsUnit.Pixel);
再把你的srcImage释放掉吧。。。
再把你的srcImage释放掉吧。。。
#4
原图片不能删除不是因为绑Graphics了,而是你打开图片的方式,打开文件时用文件流的方式转化为System.Drawing.Image就可以删除了!主要你打开图片是直接打开的图片文件,后来没有关闭他,所以删除不掉
#5
上传或是更新,建议均先放在一个临时目录中,然后处理。
日后再创建一个删除动作,定时删除昨天或以前的临时文件。
http://www.cnblogs.com/insus/archive/2009/04/08/1431986.html
http://www.cnblogs.com/insus/archive/2011/03/17/1986723.html
日后再创建一个删除动作,定时删除昨天或以前的临时文件。
http://www.cnblogs.com/insus/archive/2009/04/08/1431986.html
http://www.cnblogs.com/insus/archive/2011/03/17/1986723.html
#6
按1楼的方法解决了,原来就是忘记关闭了。。十分感谢各位热心解答!