我正在将一个
我希望上面的代码能够在视图中心呈现图像,但是图像实际上被定位在原点。这里是展示问题的存储库: https://github.com/truemetal/centered-render-of-ciimage-to-mtkview 在责怪Metal或CoreImage之前,我想确保我没有做错什么。
我希望能提供一个链接到说明文档的网址,以证明我不能做这样的事情。 我可以通过将图像合成到另一个与可绘制对象完全相同大小的图像上来解决这个问题,但我仍然对为什么上面的代码不起作用感兴趣。
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())
我希望上面的代码能够在视图中心呈现图像,但是图像实际上被定位在原点。这里是展示问题的存储库: https://github.com/truemetal/centered-render-of-ciimage-to-mtkview 在责怪Metal或CoreImage之前,我想确保我没有做错什么。
我希望能提供一个链接到说明文档的网址,以证明我不能做这样的事情。 我可以通过将图像合成到另一个与可绘制对象完全相同大小的图像上来解决这个问题,但我仍然对为什么上面的代码不起作用感兴趣。
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())