Я хочу захватить вывод MTKView через текстуру представления в CIImageAccumulator для достижения эффекта постепенного наращивания рисования. Проблема в том, что аккумулятор, кажется, не работает с цветовым / альфа / цветовым пространством оригинала, как показано ниже:
На изображении выше я запечатлел более темный мазок кисти с помощью свойства currentDrawable.texture представления:
lastSubStrokeCIImage = CIImage(mtlTexture: self.currentDrawable!.texture, options: nil)!.oriented(CGImagePropertyOrientation.downMirrored)
subStrokeUIView.image = UIImage(ciImage: lastSubStrokeCIImage)
Теперь, когда я беру то же изображение и передаю его в CIIAcumulator для последующей обработки (я делаю это только один раз для каждого сегмента чертежа), в результате получается более яркий результат, показанный в верхней части приложения:
lazy var ciSubCurveAccumulator: CIImageAccumulator =
{
[unowned self] in
return CIImageAccumulator(extent: CGRect(x: 0, y: 0, width: self.frame.width * self.contentScaleFactor, height: self.frame.height * self.window!.screen.scale ) , format: kCIFormatBGRA8)
}()!
ciSubCurveAccumulator.setImage(lastSubStrokeCIImage)
strokeUIView.image = UIImage(ciImage: ciSubCurveAccumulator.image())
Я пробовал использовать различные kCIFormats в определении CIImageAccumulator, но безрезультатно. Что делает CIImageAccumulator, чтобы испортить оригинал, и как это исправить? Обратите внимание, что я намерен использовать ciSubCurveAccumulator, чтобы постепенно создавать непрерывный мазок однородного цвета. Для простоты вопроса накапливающую часть не показываю. Эта проблема останавливает меня как вкопанный.
Любые предложения будут приняты во внимание
MTKView
? В частности, каково значение его свойстваframebufferOnly
? - person Ken Thomases   schedule 24.03.2018