我想实现一个实时性能视图来显示核心图像过滤器输出。形成 Apple 的文档,看来我应该使用基于 GPU 的上下文进行绘图。
有一些术语我很困惑。EAGLContext
, CIContext
, GLKView
. 这些是什么东西?另外,我应该使用从EAGLContext
创建并将其设置为还是使用. 这两种方法有什么区别?CGImage
CIImage
UIImageView
GLKView
我想实现一个实时性能视图来显示核心图像过滤器输出。形成 Apple 的文档,看来我应该使用基于 GPU 的上下文进行绘图。
有一些术语我很困惑。EAGLContext
, CIContext
, GLKView
. 这些是什么东西?另外,我应该使用从EAGLContext
创建并将其设置为还是使用. 这两种方法有什么区别?CGImage
CIImage
UIImageView
GLKView
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 存储库。
西蒙