首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CIImage中将IOSurface呈现为特定的rect

在CIImage中将IOSurface呈现为特定的rect
EN

Stack Overflow用户
提问于 2014-02-08 21:47:13
回答 2查看 1.2K关注 0票数 2

我试图使用CIImage将边界参数r指定为目标矩形,从而将IOSurface中的特定位置呈现为[CIContext render:toIOSurface:bounds:colorSpace:]

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

在我看来,这就像是CoreImage中的一个bug。

我可以通过将图像呈现到具有相同大小的IOSurface的中间CIImage,然后将表面的内容复制到另一个表面,从而解决这个问题。然而,我想避免在解决方案中的分配和复制。

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-09 21:44:38

您想要发生的事情目前在API中是不可能的(这是一个巨大的障碍)。

但是,您可以将IOSurface包装为纹理(使用CGLTexImageIOSurface2D),然后使用CIContext的contextWithCGLContext:…,然后最后使用drawImage:inRect:fromRect:来完成此操作。

这是一次巨大的黑客攻击,但(主要是):https://github.com/ccgus/FMMicroPaintPlus/blob/master/CIMicroPaint/FMIOSurfaceAccumulator.m

票数 2
EN

Stack Overflow用户

发布于 2019-06-18 21:39:46

由于macOS 10.13,您可以使用CIRenderDestinationCIContext.startTask(toRender:from:to:at:)实现相同的结果,而不必提供中间映像。

在我的例子中,我使用了的组合来只呈现输出映像的一个子部分,作为管道的一部分,如下所示:

代码语言:javascript
复制
let renderDst = CIRenderDestination(mtlTexture: texture, commandBuffer: commandBuffer)
try! context.startTask(toRender: ciimage,
                           from: dirtyRect, to: renderDst, at: dirtyRect.origin)

由于我已经在与MTLCommandBuffer同步,所以不需要与返回的CIRenderTask同步。

如果您想了解更多细节,可以查看核心图像的进展:过滤器,金属,视觉和更多(WWDC视频从2017年开始)的幻灯片(从83开始)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21652199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档