【问题标题】:Have trouble with comparing two objects of an array比较数组的两个对象时遇到问题
【发布时间】:2012-04-20 09:17:03
【问题描述】:

这个问题可能看起来是重复的,但它有一种特定的时刻,可能与其他类似的问题不同......

所以...我有两张图片。两者都是在同一个屏幕上捕获的。在我的代码中,将两个(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,尽管在数组中是同一大图像的裁剪图像。
在此先感谢....

【问题讨论】:

    标签: objective-c arrays comparison compare elements


    【解决方案1】:

    我非常怀疑UIImage 实现-isEqual:(和-hash)来比较图像内容!几乎可以肯定,它们只是依赖于指针标识的标准 NSObject 相等语义(它们只与自己比较)。

    如果您想比较两张图片是否相等,您必须自己进行。比较它们的所有元数据属性。然后,在您确定所有元数据都相等后,获取底层图像位并使用memcmp()NSData 进行比较。

    【讨论】:

    • 但在我的情况下,它就像一个数组对象......如果我把两个相同的图像变量(newCapturedImage,oldCapturedImage)我成功了。但如果图像变量不同,则失败。
    • “像一个数组对象”?这是什么意思,它如何解决我告诉你的问题?并且将对象与自身进行比较,这就是我认为您所说的“如果我将两个相同的图像变量......我成功”的意思,总是会报告相等。这就是我上面所说的。
    • 好的,我明白了。现在很清楚......我无法比较两个不同的图像。如果我想这样做,我必须逐个像素地比较它们……对吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多