如何有效地级联 CIFilter
How to efficiently cascade CIFilters
目前我正在像这样级联 CIFilters:
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 的最高效的性能方式?
基本上就可以了。是否使用这些额外的变量并不重要,因为 Core Image 只会在图像渲染后计算效果。
就我个人而言,我不建议为每张图片重复使用相同的变量,这可能会混淆在哪里使用哪个图片。相反,我会直接从每个过滤器传递 属性:
filterA.setvalue(inputImage, forKey: kCIInputImageKey)
filterB.setValue(filterA.outputImage, forKey: kCIInputImageKey)
filterC.setValue(filterB.outputImage, forKey: kCIInputImageKey)
return render(filterC.outputImage)
性能完全一样。
目前我正在像这样级联 CIFilters:
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 的最高效的性能方式?
基本上就可以了。是否使用这些额外的变量并不重要,因为 Core Image 只会在图像渲染后计算效果。
就我个人而言,我不建议为每张图片重复使用相同的变量,这可能会混淆在哪里使用哪个图片。相反,我会直接从每个过滤器传递 属性:
filterA.setvalue(inputImage, forKey: kCIInputImageKey)
filterB.setValue(filterA.outputImage, forKey: kCIInputImageKey)
filterC.setValue(filterB.outputImage, forKey: kCIInputImageKey)
return render(filterC.outputImage)
性能完全一样。