复合两个CIImages并在UIImageView问题中显示[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我在将两张图片与CIFilter合并时遇到了麻烦。这里出了什么问题?

下面的代码创建一个UIImageView并将其添加到视图中,然后将两个图像imageAimageBCIFilter组合,并将复合输出到UIImageView

但是,组合图像不会显示在UIImageView中,它仍然是空白的。


问题:

  1. 将合成图像显示到UIImageView的正确代码是什么?
  2. 是否有更高效的方式将两个图像与CIFilter结合起来?

码:

    let imageView = UIImageView()
    imageView.frame = CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height)
    imageView.contentMode = .Center
    view.addSubview(imageView)

    let imageA = CIImage(image: UIImage(named:"imageA")!)
    let imageB = CIImage(image: UIImage(named:"imageB")!)
    let imageFilter = CIFilter(name: "CIAdditionCompositing")!

    imageFilter.setValue(imageA, forKey: kCIInputImageKey)
    imageFilter.setValue(imageB, forKey: kCIInputBackgroundImageKey)

    if let imageCombined = imageFilter.outputImage {
        let image = UIImage(CIImage: imageCombined)
        imageView.image = image
    }
ios swift optimization cifilter ciimage
1个回答
1
投票

我一直有直接UIImage << >> CIImage转换的问题。如果你有框架/尺寸/范围你可以使用,我建议使用CIContext并首先创建一个CGImage

let ciContext = CIContext(options: nil)
let cgImg = ciContext.createCGImage(imageCombined, from: imageCombined.extent)
let uiImage = UIImage(cgImage: cgImg!)

请记住,创建CIContext是“昂贵的”,因此如果您需要为多个图像执行此操作,请创建一个并将其用于所有渲染。此外,如果你在某个地方使用GLKView,请使用它的上下文。

关于问题#2,您的代码看起来很好。您可以“组合代码行,但这不会影响性能。在您调用过滤器的outputImage之前,CoreImage不会”处理“任何内容。

© www.soinside.com 2019 - 2024. All rights reserved.