2014-01-25 3 views
0
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

Покажите нам полный воспроизводимый код –

+0

@AlvinWong Это ссылка, которую я разместил (обзор кода) http://codereview.stackexchange.com/questions/39980/is-there-a-faster-way-to-compare- if-2-images-are-the-same/39987 # 39987 – puretppc

+0

Заблокировали ли вы что-то, но забыли позвонить UnlockBits? –

ответ

6

Ну, на самом деле это у меня ушло некоторое время, чтобы заметить эту строку:

if (compare(image2, image2)) 

Вы передаете то же самое Bitmap функции compare, поэтому, когда функция пытается вызвать LockBits на том же Bitmap дважды, это исключение происходит.

Поэтому, чтобы исправить это, не передавайте одинаковые растровые изображения в функцию.

+1

OMG I «Так глупо :(Он работает сейчас. Спасибо, что заметили. – puretppc

Смежные вопросы