位图区域已被锁定

时间:2014-01-25 03:24:15

标签: c# bitmap invalidoperationexception

string pathFile = @"C:\Users\user\Downloads\CaptchaCollection\Small\Sorted\";

var files = Directory.GetFiles(pathFile).Select(nameWithExtension => Path.GetFileNameWithoutExtension(nameWithExtension)).Where(name => { int number; return int.TryParse(name, out number); }).Select(name => int.Parse(name)).OrderBy(number => number).ToArray();
List<int> fileList = files.ToList();

image1 = new Bitmap(pathFile + fileList[0].ToString() + ".png");
image2 = new Bitmap(pathFile + fileList[1].ToString() + ".png");

if (compare(image2, image2))
{
    // if it's equal
    File.Delete(image2.ToString());
}

所以基本上我现在所拥有的是每个文件都是数字的(没有扩展名)。我创建了一个数组,然后将其转换为列表。

我使用我的全局变量image1image2,用于比较它们是否相同。

随着搜索的进行,

image1image2会发生变化。所以它改变了索引。

如果我的compare()方法返回true,它将删除第二个图像。

但是,在compare()方法上,我似乎在此行中收到此异常错误:

BitmapData bmpData2 = bmp2.LockBits(rect, ImageLockMode.ReadOnly, bmp2.PixelFormat);

1 个答案:

答案 0 :(得分:7)

嗯,实际上我花了很长时间才注意到这一行:

if (compare(image2, image2))

您正在将相同的Bitmap传递给函数compare,因此当该函数尝试在同一LockBits上调用Bitmap两次时,会发生此异常。

因此,为了解决这个问题,请不要将相同的位图传递给函数。

相关问题