感谢您花时间阅读本文。我正在尝试加速我写的一段代码。在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; }
答案 0 :(得分:1)
Monty,当你像你一样使用强化循环时,你不应该使用很多obj-c调用。
NSBitmapImageRep包含CGImage引用。并且您可以使用CFEqual来比较2 CFStruct,CGImage是。在那之后,你只需要交叉你的手指,CGImage上的相等是关于像素,chanel,位图信息等等......我不知道概念上两个相同的图像是什么相同。但是你有很多工具可以做你想做的事。
很抱歉,如果那不是回复,但我会给你一些关于你应该完成你想要的方式的大提示。