2014-02-08 15 views
2

我想通过将边界参数r指定为目标矩形,使用[CIContext render:toIOSurface:bounds:colorSpace:]将CIImage渲染到IOSurface中的特定位置。将CIImage渲染到IOSurface中的特定矩形

根据文档,这应该可以工作,但CoreImage总是将图像渲染到IOSurface的左下角。

在我看来,像在CoreImage中的错误。

我可以通过将图像渲染到具有相同CIImage大小的中间IOSurface,然后将表面内容复制到另一个表面来克服此问题。 但是,我想避免在解决方案中分配和复制。

有什么建议吗?

回答

2

你想要发生的事情目前不可能与该API(这是一个巨大的无赖)。你可以将你的IOSurface作为纹理(使用CGLTexImageIOSurface2D),然后使用CIContext的contextWithCGLContext:...,然后最后使用drawImage:inRect:fromRect:来完成这个任务。

这是一个巨大的黑客,但它的作品(大部分): https://github.com/ccgus/FMMicroPaintPlus/blob/master/CIMicroPaint/FMIOSurfaceAccumulator.m

+0

此解决方案是按需渲染图像的一小部分非常缓慢。主要是因为CoreImage可能会将数据从CGDataProvider复制到GPU,并且在这种情况下,似乎它的自动缓存功能无法正常工作。 –