如何有效地级联 CIFilter

Posted

技术标签:

【中文标题】如何有效地级联 CIFilter【英文标题】:How to efficiently cascade CIFilters 【发布时间】: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 的最高效的方式是什么?

【问题讨论】:

【参考方案1】:

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

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

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

return render(filterC.outputImage)

性能将完全相同。

【讨论】:

谢谢斯文。我还能尝试什么来提高性能? 如果不知道您的设置和您应用的过滤器,这真的很难说。但一般来说,您可以在应用过滤器之前尝试缩小图像(如果需要,然后再将其重新放大)。

以上是关于如何有效地级联 CIFilter的主要内容,如果未能解决你的问题,请参考以下文章

全国城市地级市区县sql

地级市行政区域划代码

判断经纬度是不是在某个省市内,或者地级市范围

中国地级市及对应经纬度

数据可视化广东省哪个地级市GDP最强?

Axure 地区选择(选择省份之后可以选择对应的地级市)