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 Это ссылка, которую я разместил (обзор кода) http://codereview.stackexchange.com/questions/39980/is-there-a-faster-way-to-compare- if-2-images-are-the-same/39987 # 39987 – puretppc
Заблокировали ли вы что-то, но забыли позвонить UnlockBits? –