从系统内存中释放位图以将其删除C#

时间:2018-11-14 14:37:35

标签: c# image memory bitmap

我正在尝试比较两张图片,如果它们是同一张图片,则删除第二张图片。当我的程序删除文件时,它会引发错误:The process cannot access the file "C:\Temp\Image.jpg" because it is being used by another process

此方法似乎无法关闭位图文件,但是我还没有找到一种从系统内存中释放位图以将其删除的方法

    public static bool ImageCompareString(Bitmap firstImage, Bitmap secondImage)
    {
        MemoryStream ms = new MemoryStream();
        firstImage.Save(ms, ImageFormat.Png);
        string firstBitmap = Convert.ToBase64String(ms.ToArray());
        ms.Position = 0;

        secondImage.Save(ms, ImageFormat.Png);
        string secondBitmap = Convert.ToBase64String(ms.ToArray());

        if (firstBitmap.Equals(secondBitmap))
        {
            ms.Close();
            return true;
        }
        else 
        {
            ms.Close();
            return false;
        }
    }

2 个答案:

答案 0 :(得分:0)

在删除实际文件之前,放置第二个图像的位图对象。所以像“ secondImage.Dispose()”

答案 1 :(得分:0)

我建议使用try cach并运行dispose,以释放finnaly部分中的资源。即使抛出异常,这也会处理该对象:

    public static bool ImageCompareString(Bitmap firstImage, Bitmap secondImage)
{
    try
    {
        MemoryStream ms = new MemoryStream();
        firstImage.Save(ms, ImageFormat.Png);
        string firstBitmap = Convert.ToBase64String(ms.ToArray());
        ms.Position = 0;

        secondImage.Save(ms, ImageFormat.Png);
        string secondBitmap = Convert.ToBase64String(ms.ToArray());

        if (firstBitmap.Equals(secondBitmap))
        {
            return true;
        }
        else 
        {           
            return false;
        }
    } 
    catch(Exception ex)
    {
        //log it, display or whatever
    } 
    finnaly 
    {
        ms.Close();
        ms.Dispose();
    }

}