Core Graphics在iPhone上的PIXEL迭代性能不佳?

Rex*_*ids 1 iphone opengl-es core-graphics uikit uiimage

我试图对像素进行迭代,以在不使用OpenGL的情况下更改UIImage的RGBA值.我尝试使用下面的代码测试迭代性能,但非常不满意.好像我每秒只能进行几千次迭代.而对于具有数十万像素的UIImage,这将花费太长时间......任何人都对如何提高性能或这些操作通常需要多长时间有任何建议?

-(UIImage*)modifyPixels:(UIImage*)originalImage
{
    NSData* pixelData = (NSData*)CGDataProviderCopyData(CGImageGetDataProvider(originalImage.CGImage));
    void* pixelBytes = [pixelData bytes];

    // Take away the red pixel, assuming 32-bit RGBA
    for(int i = 0; i < [pixelData length]; i += 4) {
        NSLog(@" %ith iteration (%i / %i / %i / %i)", i, pixelData[i], pixelData[i+1], pixelData[i+2], pixelData[i+3]);
    }

    //NSData* newPixelData = [NSData dataWithBytes:pixelBytes length:[pixelData length]];
    //UIImage* newImage = [UIImage imageWithData:newPixelData]; 

    return originalImage;    
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*ley 5

不要[pixelData length]在循环中调用.编译器无法知道此消息的结果是否为常量,因此它将调用该方法.