Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 有没有更快的方法逐像素比较NSBitmapImageRep对象?_Objective C_Performance_Core Graphics_Getpixel_Nsbitmapimagerep - Fatal编程技术网

Objective c 有没有更快的方法逐像素比较NSBitmapImageRep对象?

Objective c 有没有更快的方法逐像素比较NSBitmapImageRep对象?,objective-c,performance,core-graphics,getpixel,nsbitmapimagerep,Objective C,Performance,Core Graphics,Getpixel,Nsbitmapimagerep,我正在努力加速我不久前写的一些代码 使用Xcode中的工具,我发现主要的瓶颈在于这种方法,特别是getPixel调用 - (BOOL)fasterCompareImage:(NSBitmapImageRep *)imageRepA IdenticalTo:(NSBitmapImageRep *)imageRepB { // look for obvious differences ie: width and height differences... NSSize imageA

我正在努力加速我不久前写的一些代码

使用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;
}
-(BOOL)快速比较图像:(NSBitmapImageRep*)图像Repa识别阿尔托:(NSBitmapImageRep*)图像Repb{
//寻找明显的差异,例如:宽度和高度差异。。。
NSSize imageASize=[imageRepA大小];
NSSize imageBSize=[imageRepB大小];
if((imageASize.width!=imageBSize.width)| |(imageASize.height!=imageBSize.height)){
返回否;
}
//现在开始看每一点
n整数像素[3];
nsu整数像素of b[3];
对于(int row=0;row<(imageASize.height);row=row+1){
对于(int col=0;col<(imageASize.width);col=col+1){
[imageRepA getPixel:pixelOfA atX:row y:col];
[imageRepB getPixel:pixelOfB atX:row y:col];
如果(pixelOfA[1]!=pixelOfB[1]){
返回否;
}
}
}
返回YES;
}
基本上,我的方法使用两个NSBitmapImageRep对象,逐像素比较它们以查找差异


有人对代码或其他方法有什么建议吗?

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

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


很抱歉,如果这不是一个实际的回应,但我给你的方式,你应该实现你想要的大提示

Monty,当你像以前那样使用密集循环时,你不应该使用很多obj-c调用

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


很抱歉,如果这不是一个实际的回应,但我给你的方式,你应该实现你想要的大提示

谢谢你,你好。在接下来的几天里,我将探讨你的一些建议,并向你汇报。欣赏这些提示:)您好,你好,我按照建议使用cgimagerf进行了探索,速度提高了一倍:)我无法让CFEqual正常工作,因此一直在比较每个cgimagerf中的字节,这些字节实际上存储在CFDataRef中(在cgimagerf中)。让CFDataRef比较字节是一项非常昂贵的操作。我正在使用函数CGDataProviderCopyData(…)来实现这一点。你能建议另一种方法或解释我如何使用CFEqual来比较CGImages吗?好的,我现在意识到为什么CFEqual看起来不起作用了。这是因为除了存储在CGImageRef中的像素数据(例如bitsPerPixel)和CFEqual中的所有属性之外,还有其他属性。对于任何正在寻找比较图像的快速方法的人,请使用CFImageRef“对象”而不是它们的NS。。。对应项并调用CFEqual进行比较。确保您意识到CFEqual将比较所有属性,而不仅仅是像素数据。谢谢,你好,你让我走上了正确的方向:)谢谢,你好。在接下来的几天里,我将探讨你的一些建议,并向你汇报。欣赏这些提示:)您好,你好,我按照建议使用cgimagerf进行了探索,速度提高了一倍:)我无法让CFEqual正常工作,因此一直在比较每个cgimagerf中的字节,这些字节实际上存储在CFDataRef中(在cgimagerf中)。让CFDataRef比较字节是一项非常昂贵的操作。我正在使用函数CGDataProviderCopyData(…)来实现这一点。你能建议另一种方法或解释我如何使用CFEqual来比较CGImages吗?好的,我现在意识到为什么CFEqual看起来不起作用了。这是因为除了存储在CGImageRef中的像素数据(例如bitsPerPixel)和CFEqual中的所有属性之外,还有其他属性。对于任何正在寻找比较图像的快速方法的人,请使用CFImageRef“对象”而不是它们的NS。。。对应项并调用CFEqual进行比较。确保您意识到CFEqual将比较所有属性,而不仅仅是像素数据。谢谢你,你好,你让我走上了正确的方向:)