我的应用程序在使用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
创建
代码中有什么问题吗?我正在做正确的事情来加速渲染过程吗?谢谢。
答案 0 :(得分:1)
尝试制作这样的上下文......
EAGLContext *myEAGLContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
CIContext *myContext = [CIContext contextWithEAGLContext:myEAGLContext options:nil];