0

この質問は重複しているように見えるかもしれませんが、このような他の質問とは異なる特定の瞬間があります...

だから...私は2つの画像を持っています。どちらも同じ画面をキャプチャしています。私のコードでは、2 つ (screenCaptureFirst と screenCaptureSecond) の大きな画像を小さなトリミングされた画像にトリミングします (トリミングされた各画像には 32x32 の寸法があります)。次に、それらを 2 つの配列にプッシュします。そして今、2 つの配列の各要素を比較する必要があります。 - (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 の場合に到達する場合です。
前もって感謝します....

4

1 に答える 1

1

画像の内容を比較するために(および) をUIImage実装することは非常に疑わしいです! ほぼ確実に、それらはポインター ID の標準の等値セマンティクスに依存しているだけです (それらは自分自身と等しいだけを比較します)。-isEqual:-hashNSObject

2 つの画像の同等性を比較したい場合は、自分で行う必要があります。すべてのメタデータ プロパティを比較します。memcmp()次に、すべてのメタデータが等しいことを確認したら、基になるイメージ ビットを取得し、またはを使用してそれらを比較しNSDataます。

于 2012-04-20T10:44:12.960 に答える