2012-04-20 1 views
0

Этот вопрос может показаться дубликат, но она имеет вид конкретный момент, который может отличаться от других подобных вопросов ...Есть проблемы с сравнения двух объектов массива

Так ... У меня есть два изображения. Оба захвачены на одном экране. В моем коде посещает два (screenCaptureFirst и screenCaptureSecond) больших изображений в маленькие обрезанные изображения (каждое обрезанное изображение имеет размер 32x32). Затем я нажимаю их на два массива. И теперь мне приходится сравнивать каждый элемент из двух массивов. - (void) differenceDetector{

int index=0; 

for (int currentGridY=0; currentGridY<newCapturedImage.size.height; currentGridY+=gridSize) { 
    for (int currentGridX=0; currentGridX<newCapturedImage.size.width; currentGridX+=gridSize) { 

     CGRect rect=CGRectMake(currentGridX, currentGridY, gridSize, gridSize); 
     UIImage *croppedNewImage=[self croppedImage:rect anImage:newCapturedImage]; 
     [arrayOfNewImageGrids addObject:croppedNewImage]; 
     UIImage *croppedOldImage=[self croppedImage:rect anImage:oldCapturedImage]; 
     [arrayOfOldImageGrids addObject:croppedOldImage]; 

     if ([[arrayOfNewImageGrids objectAtIndex:index]isEqual:[arrayOfOldImageGrids objectAtIndex:index]]) { 
      NSLog(@"Index=%d",index); 
     } 
     NSLog(@"newGridArray=%@",[arrayOfNewImageGrids objectAtIndex:index]); 
     NSLog(@"oldGridArray=%@",[arrayOfOldImageGrids objectAtIndex:index]); 
     index++; 
    } 
} 

Проблема в том, когда она идет, если результат сравнения FALSE, хотя в массивах обрезаны изображения одного и того же большого изображения.
Заранее спасибо ....

ответ

1

я очень сомневаюсь, что UIImage реализует -isEqual:-hash) для сравнения содержимого изображения! Почти наверняка они просто полагаются на стандартную семантику равенства идентификатора указателя (они сравнивают только равные себе).

Если вы хотите сравнить два изображения для равенства, вам придется сделать это самостоятельно. Сравните все их свойства метаданных. Затем, после того, как вы уверены, что все метаданные равны, получите базовые биты изображения и сравните их с помощью memcmp() или NSData.

+0

Но в моем случае это похоже на объект массива ... И если я ставлю одну и ту же переменную изображения (newCapturedImage, oldCapturedImage), у меня есть успех. Но если переменные изображения отличаются друг от друга, это терпит неудачу. – Garnik

+0

"как объект массива"? Что это значит и как оно относится к тому, что я вам сказал? И сравнение объекта с самим собой, что, как я думаю, вы подразумеваете под «если я ставлю одну и ту же переменную изображения ... у меня есть успех», всегда будет сообщать о равенстве. Вот что я сказал выше. –

+0

ОК, я понял. Теперь ясно ... Я не могу сравнивать два разных изображения. Если я хочу это сделать, я должен сравнить их пиксель за пикселем ... правильно? – Garnik