在Core Image性能问题中应用过滤器

时间:2014-03-20 09:18:21

标签: ios core-image

我的应用程序在使用Core Image选择/捕获图片后对其应用过滤器。它在小图片上工作正常但是如果我用相机拍照则需要大约3-4秒来处理图片并应用滤镜。我阅读了核心图像编程指南的性能主题,我发现能够决定是否要使用CPU或GPU。所以我应用了所写的内容,它仍然很慢,加上控制台中发生错误。我将发布原始代码,我应用于切换到GPU的更改以及发生的错误。

原始代码:

CIContext *context = [CIContext contextWithEAGLContext:nil]; //[CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer: [NSNumber numberWithBool:NO]}];
    CIImage *image = [CIImage imageWithData:UIImagePNGRepresentation(_originalImage)];
    CIFilter *filter = [CIFilter filterWithName:_filters[filterName]];
    if ([filterName isEqualToString:@"Sepia"]) {
        [filter setValue:image forKey:kCIInputImageKey];
        [filter setValue:@0.8f forKey:kCIInputIntensityKey];
    }
    if ([filterName isEqualToString:@"B/W"]) {
        [filter setValue:image forKey:kCIInputImageKey];
    }
    if ([filterName isEqualToString:@"Bloom"]) {
        [filter setValue:image forKey:kCIInputImageKey];
        [filter setValue:@1.0f forKey:kCIInputRadiusKey];
        [filter setValue:@1.0f forKey:kCIInputIntensityKey];
    }
    CIImage *result = [filter valueForKey:kCIOutputImageKey];
    CGRect extent = [result extent];
    CGImageRef cgimage = [context createCGImage:result fromRect:extent];
    UIImage *filteredImage = [UIImage imageWithCGImage:cgimage];
    [_filteredImageView setImage:filteredImage];
    tempFilteredImage = filteredImage;

上下文的修改代码:

CIContext *context = [CIContext contextWithEAGLContext:nil];

更改CIContext代码后发生错误:

  

CIContexts只能使用ES 2.0 EAGLContexts

创建

代码中有什么问题吗?我正在做正确的事情来加速渲染过程吗?谢谢。

1 个答案:

答案 0 :(得分:1)

尝试制作这样的上下文......

EAGLContext *myEAGLContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
CIContext *myContext = [CIContext contextWithEAGLContext:myEAGLContext options:nil];