如何实现核心图像过滤器的实时性能视图

How to implement a real-time performance view for core image filter

我想实现一个实时性能视图来显示核心图像过滤器输出。从Apple的文档来看,我似乎应该使用基于GPU的上下文来绘图。

有一些术语我很困惑。 EAGLContextCIContextGLKView。这些是什么?另外,我应该使用 EAGLContextCIImage 创建 CGImage 并将其设置为 UIImageView 还是使用 GLKView。这两种方法有什么区别?

您可以通过避免 UIImageView 并使用 OpenGL 视图 GLKView 来将图像保留在 GPU 上。要使其与 CoreImage 一起使用,您需要创建一个带有 EAGL 上下文的 CIContext

let eaglContext = EAGLContext(API: .OpenGLES2)

lazy var ciContext: CIContext =
{
    [unowned self] in

    return CIContext(EAGLContext: self.eaglContext,
        options: [kCIContextWorkingColorSpace: NSNull()])
}()

你的GLKView的上下文应该是一样的eaglContext,它也需要一个符合GLKViewDelegate.

的委托

要显示图像,请使用 setNeedsDisplay() 使显示无效。这将在委托上调用 glkView(:drawInRect:) 并且在这里您使用 Core Image 上下文将图像绘制到 GLKView:

    ciContext.drawImage(image,
        inRect: targetRect,
        fromRect: image.extent)

其中 image 是要显示的 CIImage

如果这听起来太费力了,我已经为您完成了工作,请查看我的 CoreImageHelpers 存储库。

西蒙