从UIImage中删除颜色的最快方法?

时间:2013-08-07 10:47:07

标签: ios core-image

我有一个图像,我用它来创建一个立体照片,将它分成单独的红色和青色版本,并在它们之间设置视差。

源图像为1146 x 580(视网膜分辨率)。我正在使用CIColorMatrix来创建每个图像。这是Cyan版本的代码,它删除了所有的红色。

-(UIImage *)createCyan:(UIImage *)anImage
{

    CIImage *inputImage = [CIImage imageWithCGImage:anImage.CGImage];

    CIFilter *matrixFilter = [CIFilter filterWithName:@"CIColorMatrix"];
    [matrixFilter setDefaults];
    [matrixFilter setValue:inputImage forKey:kCIInputImageKey];
    [matrixFilter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:0] forKey:@"inputRVector"];
    [matrixFilter setValue:[CIVector vectorWithX:0 Y:1 Z:0 W:0] forKey:@"inputGVector"];
    [matrixFilter setValue:[CIVector vectorWithX:0 Y:0 Z:1 W:0] forKey:@"inputBVector"];
    [matrixFilter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:1] forKey:@"inputAVector"];

    CIImage *outputImage = [matrixFilter outputImage];

    CIContext *context = [CIContext contextWithOptions:nil];
    CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; 

    return [UIImage imageWithCGImage:cgimg];
}

问题在于这需要一秒钟来处理。我需要找到一种更快的方法(如果存在的话)来完成同样的事情。

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

速度的问题不在于过滤器,而是在重复初始化CIContext,这是一个非常昂贵的过程。事先创建CIContext,问题就解决了。