我知道如何采取另一种方法。但是,如何从纹理创建CIImage,而无需复制到CPU内存中?[CIImage imageWithData]?CVOpenGLESTextureCache?
glReadPixels()
读取像素数据。 CIImage的所有输入(数据,CGImageRef,CVPixelBufferRef)都在CPU端,因此我看不到将其快速传递到CIImage的路径。 在那里,您最好的选择是使用glReadPixels()
从纹理中提取原始RGBA数据,并使用-initWithData:options:
和kCIFormatRGBA8
像素格式将其发送到CIImage中。(更新:2012年3月14日)在iOS 5.0上,现在有一种更快的抓取OpenGL ES帧数据的方法,使用新的纹理缓存。 我在this answer中详细描述了这一点。glReadPixels()
。 - Brad LarsonglReadPixels()
要快得多:https://dev59.com/Qmkw5IYBdhLWcg3w8O-o#9704392 - Brad LarsoniOS 6及以上版本中,您可以使用内置的init方法来处理此情况:
initWithTexture:size:flipped:colorSpace:
你可能会发现以下内容有帮助:
一般来说,我认为图像数据需要从GPU复制到CPU。然而,上述提到的iOS功能可能会使这更加容易和高效。