如何删除加载在datagridview C#上的图像文件?

时间:2017-09-18 08:03:09

标签: c# image bitmap

我的表单上有一个带有图像列的datagridview,我将其值设置为某个文件夹中的图像..

Bitmap PicImage;

PicImage = new Bitmap(ImagePath);
Grid.Rows[i].Cells["ImageColumn"].Value = PicImage;

当我想删除该行时,该图像也应该被删除,但是我得到“该进程无法访问该文件...”消息:

File.delete(ImagePath);

我该如何解决?

3 个答案:

答案 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.