【问题标题】:How to efficiently cascade CIFilters如何有效地级联 CIFilter
【发布时间】:2021-12-29 18:01:24
【问题描述】:

目前我正在像这样级联 CIFilter:

    let filterA = CIFilter(...)
    let filterB = CIFilter(...)
    let filterC = CIFilter(...)

    var outputImage = CIImage(data: myInputData, options: [.applyOrientationProperty : true])

    filterA.setValue(outputImage, forKey: kCIInputImageKey)
    var outputImage = filterA.outputImage

    filterB.setValue(outputImage, forKey: kCIInputImageKey)
    var outputImage = filterB.outputImage

    filterC.setValue(outputImage, forKey: kCIInputImageKey)
    var outputImage = filterC.outputImage

    return render(ouputImage)

在某种程度上使用var outputImage 效率低吗?或者一般来说,级联CIFilters 的最高效的方式是什么?

【问题讨论】:

    标签: ios swift performance core-image cifilter


    【解决方案1】:

    基本上没问题。是否使用这些额外的变量并不重要,因为 Core Image 只会在图像渲染后计算效果。

    我个人不建议为每张图片重复使用相同的变量,这可能会让人混淆在哪里使用哪张图片。相反,我会直接从每个过滤器传递属性:

    filterA.setvalue(inputImage, forKey: kCIInputImageKey)
    filterB.setValue(filterA.outputImage, forKey: kCIInputImageKey)
    filterC.setValue(filterB.outputImage, forKey: kCIInputImageKey)
    
    return render(filterC.outputImage)
    

    性能将完全相同。

    【讨论】:

    • 谢谢斯文。我还能尝试什么来提高性能?
    • 如果不知道您的设置和您应用的过滤器,这真的很难说。但一般来说,您可以在应用过滤器之前尝试缩小图像(如果需要,然后再将其重新放大)。
    猜你喜欢
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 2020-02-03
    • 1970-01-01
    相关资源
    最近更新 更多