是否有更快的方法来逐像素比较NSBitmapImageRep对象?

问题描述 投票:1回答: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对象,并逐像素比较它们以查找差异。

有人对代码有任何建议或其他方法吗?

objective-c performance core-graphics getpixel nsbitmapimagerep
1个回答
1
投票

蒙蒂,当您像以前一样使用密集循环时,不应使用很多obj-c调用。

NSBitmapImageRep拥有CGImage参考。您可以使用CFEqual来比较2个CFStruct,其中CGImage是。在那之后,您只需要动动手指,即可知道CGImage上的相等性是关于像素,香奈儿,位图信息等等的……我不知道什么是两个相同的图像。但是您这里有很多工具可以执行您想要的操作。

很抱歉,这实际上不是一个回应,但是我为您提供了完成目标所需方式的重要提示。

© www.soinside.com 2019 - 2024. All rights reserved.