我的表单上有一个带有图像列的datagridview,我将其值设置为某个文件夹中的图像..
Bitmap PicImage;
PicImage = new Bitmap(ImagePath);
Grid.Rows[i].Cells["ImageColumn"].Value = PicImage;
当我想删除该行时,该图像也应该被删除,但是我得到“该进程无法访问该文件...”消息:
File.delete(ImagePath);
我该如何解决?
答案 0 :(得分:1)
使用文件流解锁文件,而不是:
PicImage = new Bitmap(ImagePath);
使用:
using (var stream= new System.IO.FileStream(ImagePath, System.IO.FileMode.Open))
{
var bmp= new Bitmap(stream);
PicImage = (Bitmap) bmp.Clone();
}
答案 1 :(得分:0)
首先尝试从位图中卸载图像,然后将其删除。
答案 2 :(得分:0)
最干净的方法是在没有任何链接到文件或流的情况下加载它。如果它仅用于在UI上显示,那么使用LockBits
进行深度克隆的最简单方法就是将其绘制在新的32BPP ARGB图像上:
Bitmap image;
using (Bitmap tmpImage = new Bitmap(filepath))
{
image = new Bitmap(tmpImage.Width, tmpImage.Height, PixelFormat.Format32bppArgb);
using (Graphics gr = Graphics.FromImage(image))
gr.DrawImage(tmpImage, new Rectangle(0, 0, image.Width, image.Height));
}
// Bitmap "image" is now ready to use.