如何有效地级联 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
效率低吗?或者一般来说,级联CIFilter
s 的最高效的方式是什么?
【问题讨论】:
【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章