1

我正在尝试加快我不久前写的一些代码。

在 Xcode 中使用工具我发现主要瓶颈在于此方法,尤其是 getPixel 调用。

- (BOOL)fasterCompareImage:(NSBitmapImageRep *)imageRepA IdenticalTo:(NSBitmapImageRep *)imageRepB {

    // look for obvious differences ie: width and height differences...
    NSSize imageASize = [imageRepA size];
    NSSize imageBSize = [imageRepB size];
    if( (imageASize.width != imageBSize.width) || (imageASize.height != imageBSize.height) ) {
        return NO;
    }

    // now start looking at each point
    NSUInteger pixelOfA[3];  
    NSUInteger pixelOfB[3];  

    for (int row = 0; row < (imageASize.height); row = row +1) { 
        for(int col = 0; col < (imageASize.width); col = col +1) { 
            [imageRepA getPixel:pixelOfA atX:row y:col];
            [imageRepB getPixel:pixelOfB atX:row y:col];

            if(pixelOfA[1] != pixelOfB[1]) {  
                return NO;
            }
        }
    }

    return YES;
}

基本上我的方法需要两个 NSBitmapImageRep 对象并逐个像素地比较它们以寻找差异。

有没有人对代码或不同的方法有任何建议?

4

1 回答 1

1

蒙蒂,当你像以前那样使用密集循环时,你不应该使用大量的 obj-c 调用。

NSBitmapImageRep 持有一个 CGImage 引用。您可以使用 CFEqual 来比较 2 个 CFStruct,即 CGImage。在那之后,你只需要交叉手指,CGImage 上的平等是关于像素、香奈儿、位图信息等等......我不知道概念上两个相同的图像是什么。但是你有很多工具可以做你想做的事。

对不起,如果这实际上不是一个回应,但我会给你一些关于你应该完成你想要的方式的重要提示。

于 2013-10-23T09:20:29.450 回答