每当我为图片创建BSXPCMessage received error for message: Connection interrupted
时,我都会显示此错误CIContext
,我将允许用户进行编辑。可以在其他stackoverflow问题上找到此错误,例如此问题 - BSXPCMessage received error for message: Connection interrupted on CIContext with iOS 8
然而,虽然接受的答案(https://stackoverflow.com/a/26268910/2939977)确实可以消除错误消息,但它会将CPU使用率降至不可用的水平,并使UI变得非常不稳定(CPU使用率从50%降至约150% kCIContextUseSoftwareRenderer
标记设置为YES
),因为我的过滤器已附加到滑块并且性能至关重要。
我尝试按照apple documentation here创建EAGL context
来创建我的CIContext,并将颜色空间设置为null
。
EAGLContext *myEAGLContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
NSDictionary *options = @{ kCIContextWorkingColorSpace : [NSNull null] };
imageContext = [CIContext contextWithEAGLContext:myEAGLContext options:options];
这会创建没有错误消息的过滤器,性能要好得多!但是,只要用户使用编辑选项调整图像,我就会在第一次调整时得到BSXPCMessage received error for message: Connection interrupted
。我再也没有看到错误消息,它似乎根本没有影响输出。
[filter setValue:@(contrast) forKey:@"inputContrast"];
[filter setValue:@(color) forKey:@"inputSaturation"];
CIImage *outputImage = [filter outputImage];
CGImageRef cgimg = [imageContext createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *newImage = [UIImage imageWithCGImage:cgimg scale:1 orientation:UIImageOrientationRight];
transitionImage.image = newImage;
CGImageRelease(cgimg);
如果你想知道我确实在GPUImage
上开始,因为在滑块上使用过滤器时性能会更好但是在图像缩放时遇到了一些其他问题导致我将其删除并进入CIFilter
路线。
非常感谢任何建议或帮助:)
答案 0 :(得分:0)
如果您要创建一个CIContext:
[CIContext contextWithEAGLContext:options:]
然后你应该使用:
直接绘制到上下文中[cictx drawImage:inRect:fromRect:]
这比创建CGImageRef并将其传递给UIImageView要快得多。