2012-04-20 136 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)的圖像內容比較!幾乎可以肯定的是,它們只依賴於指針標識的標準NSObject平等語義(它們只比較自己)。

如果你想比較兩個圖像的平等,你必須自己做。比較其所有元數據屬性。然後,在確定所有元數據均相等後,獲取底層圖像位並使用memcmp()NSData進行比較。

+0

但在我的情況下,它就像一個數組對象...如果我把兩個相同的圖像變量(newCapturedImage,oldCapturedImage)我已經成功。但如果圖像變量不同,則失敗。 – Garnik 2012-04-20 10:48:31

+0

「像一個數組對象」?這是什麼意思,它是如何解決我告訴你的?並且將一個對象與自己進行比較,這就是我認爲你的意思是「如果我把兩個相同的圖像變量......我已經成功」,將始終報告相等。這就是我上面所說的。 – 2012-04-20 11:03:16

+0

好的,我明白了你的觀點。現在很清楚......我無法比較兩張不同的圖像。如果我想這樣做,我必須逐個比較它們......對嗎? – Garnik 2012-04-20 11:09:21