-1

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

有一些术语我很困惑。EAGLContext, CIContext, GLKView. 这些是什么东西?另外,我应该使用从EAGLContext创建并将其设置为还是使用. 这两种方法有什么区别?CGImageCIImageUIImageViewGLKView

4

1 回答 1

0

UIImageView您可以通过避免和使用 OpenGL 视图将图像保留在 GPU 上, GLKView. 要使用 CoreImage,您需要CIContext使用 EAGL 上下文创建一个:

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:)委托,在这里您使用核心图像上下文将图像绘制到GLKView

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

image在哪里CIImage显示。

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

西蒙

于 2016-02-18T13:28:12.367 回答