【问题标题】:Composite two CIImages and display in UIImageView issue [duplicate]合成两个 CIImage 并在 UIImageView 问题中显示 [重复]
【发布时间】:2018-05-31 22:51:04
【问题描述】:

我无法将两个图像与CIFilter 组合在一起。这里出了什么问题?

以下代码创建一个UIImageView 并将其添加到视图中,然后将imageAimageB 的两个图像与CIFilter 组合在一起,并将合成输出到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
    }

【问题讨论】:

  • 你做了什么调试?这段代码是否到达了设置图像视图的image 属性的行?
  • @rmaddy 是的,代码运行到 image 属性。没有错误。

标签: ios swift optimization cifilter ciimage


【解决方案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,您的代码看起来不错。您可以“合并代码行,但这不会影响性能。CoreImage 不会“处理”任何内容,直到您调用过滤器的 outputImage

【讨论】:

  • 谢谢@dfd。我很快就会试一试。为什么直接 UIImage > CIImage 转换可能会导致一些问题的任何特殊原因?有没有更好的优化方式来组合图像以提高性能?
  • 我真的不知道为什么直接转换是不稳定的。我一直用上面的方法。这与在GLKView 中显示内容相结合,在性能方面非常出色。您可以使用它(连同附加到输入参数的滑块)来实现“实时”过滤器渲染。然后,并且仅在需要时,转换为UIImage。要记住的一件事 - CoreImage(和 GLKViews)经过优化以使用 GPU。在模拟器中进行测试给您带来较差的性能。在认为您遇到性能问题之前,请在真实设备上进行尝试。
  • 非常感谢@dfd 的所有解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
相关资源
最近更新 更多