我正在尝试比较两张图片,如果它们是同一张图片,则删除第二张图片。当我的程序删除文件时,它会引发错误: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;
}
}
答案 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();
}
}