gpt4 book ai didi

ios - 渲染以 MTKView 为中心的小型 CIImage

转载 作者:行者123 更新时间:2023-11-28 13:50:12 25 4
gpt4 key购买 nike

我正在将 CIImage 渲染到 MTKView 并且图像小于可绘制对象。

let centered = image.transformed(by: CGAffineTransform(translationX: (view.drawableSize.width - image.extent.width) / 2, y: (view.drawableSize.height - image.extent.height) / 2))
context.render(centered, to: drawable.texture, commandBuffer: buffer, bounds: centered.extent, colorSpace: CGColorSpaceCreateDeviceRGB())

我希望上面的代码将图像呈现在 View 的中心,但图像却位于原点。

这是说明问题的 repo 协议(protocol):https://github.com/truemetal/centered-render-of-ciimage-to-mtkview

在指责 MetalCoreImage 之前,我想确保我没有做错什么。

我希望能提供指向文档的链接,该文档说明我不能做那样的事情。

problem screenshot

我可以通过将图像合成到另一个与可绘制对象大小完全相同的图像来解决此问题,但我仍然想知道为什么上面的代码不起作用。

let centered = image.transformed(by: CGAffineTransform(translationX: (view.drawableSize.width - image.extent.width) / 2, y: (view.drawableSize.height - image.extent.height) / 2))
let background = CIImage(color: .white).cropped(to: CGRect(origin: .zero, size: view.drawableSize))
let preparedImage = centered.composited(over: background)
self.context.render(preparedImage, to: drawable.texture, commandBuffer: buffer, bounds: preparedImage.extent, colorSpace: CGColorSpaceCreateDeviceRGB())

最佳答案

这是最好奇的。如果您使用“新的”CIRenderDestination API 而不是 context.render(...) 它实际上可以工作:

let destination = CIRenderDestination(width: Int(view.drawableSize.width),
height: Int(view.drawableSize.height),
pixelFormat: view.colorPixelFormat,
commandBuffer: buffer,
mtlTextureProvider: { () -> MTLTexture in
return drawable.texture
})
try! self.context.startTask(toRender: centered, to: destination)

我不知道为什么,但是 context.render(…) 似乎不尊重图像的翻译或给定的边界。也许其他人知道更多...

关于ios - 渲染以 MTKView 为中心的小型 CIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54773533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com