我正在尝试将CIFilters应用于CIImage序列,并希望实时显示它们(至少20-30 fps)。

通过EAGL支持的GLKViewCIContext上绘制图像

当使用此代码(在更新方法中)绘制图像时,我得到±20 fps(已经有点紧):

image = [image imageByApplyingTransform: CGAffineTransformMakeScale(@scale, @scale)];
[self.capture_controller.core_image_context drawImage:image atPoint: [0, 0] fromRect: image.extent];

如果我只添加一个简单的过滤器,使其降至10-12 fps(compoCISourceOverCompositing过滤器,则对inputImage全部设置一次):
[self.compo setValue:image forKey: @"inputBackgroundImage"];
image = [self.compo outputImage];

有什么办法可以从CoreImage获得更好的性能吗?我认为UIImageView可以更快地显示序列,因此应该可以。

最佳答案

有关如何获得性能的信息,请参阅CoreImage上的WWDC 2012视频。默认情况下,性能受颜色管理等因素限制。为了获得最佳性能,请在创建CIContext时关闭颜色管理,仅创建一次上下文,然后仅创建过滤器一次。

09-07 11:23