Я визуализирую от 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())