【发布时间】:2023-03-22 10:44:02
【问题描述】:
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);
【问题讨论】:
-
向我们展示完整的可重现代码
-
@AlvinWong 在我发布的链接上(代码审查)codereview.stackexchange.com/questions/39980/…
-
您是否将位锁定在某处但忘记调用 UnlockBits?
-
@AlvinWong 在方法代码的底部会说
bmp1.UnlockBits(bmpData1);bmp2.UnlockBits(bmpData2);我相信异常出现在方法的第二部分
标签: c# bitmap invalidoperationexception