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

时间:2013-10-23 06:30:16

标签: objective-c performance core-graphics getpixel nsbitmapimagerep

感谢您花时间阅读本文。我正在尝试加速我写的一段代码。在XCode中使用工具我发现主要的瓶颈在于这种方法,特别是getPixel调用。基本上我的方法采用两个NSBitmapImageRep对象,并逐个像素地比较它们以查找差异。有没有人对下面或者不同的方法有任何建议?谢谢。

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

    //寻找明显的差异,即:宽度和高度差异...... NSSize imageASize = [imageRepA size]; NSSize imageBSize = [imageRepB size]; if((imageASize.width!= imageBSize.width)||(imageASize.height!= imageBSize.height)){     返回NO; }

    //现在开始查看每个点 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;
        }
    }
    

    }

    返回YES; }

1 个答案:

答案 0 :(得分:1)

Monty,当你像你一样使用强化循环时,你不应该使用很多obj-c调用。

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

很抱歉,如果那不是回复,但我会给你一些关于你应该完成你想要的方式的大提示。