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());
}
所以基本上我现在所拥有的是每个文件都是数字的(没有扩展名)。我创建了一个数组,然后将其转换为列表。
我使用我的全局变量image1
和image2
,用于比较它们是否相同。
image1
和image2
会发生变化。所以它改变了索引。
如果我的compare()方法返回true,它将删除第二个图像。
但是,在compare()
方法上,我似乎在此行中收到此异常错误:
BitmapData bmpData2 = bmp2.LockBits(rect, ImageLockMode.ReadOnly, bmp2.PixelFormat);
答案 0 :(得分:7)
嗯,实际上我花了很长时间才注意到这一行:
if (compare(image2, image2))
您正在将相同的Bitmap
传递给函数compare
,因此当该函数尝试在同一LockBits
上调用Bitmap
两次时,会发生此异常。
因此,为了解决这个问题,请不要将相同的位图传递给函数。