我在扩展中从UIImage获取CIImage时遇到了一些问题。 我正在尝试在UIImage上应用WhitePointAdjust。
这是我的代码:
extension UIImage{
enum ImageError: Error {
case filterLookupError(String)
case filterError(CIFilter)
case ciImageError(CIImage?)
case cgImageError(CIImage, CGRect)
}
func applyWhitePointAdjustment(_ whiteColor: UIColor) -> UIImage?{
let context = CIContext(options: nil)
let filterName = "CIWhitePointAdjust"
guard let wpaFilter = CIFilter(name: filterName) else {
ImageError.filterLookupError("filter not found: " + filterName).handle()
return nil
}
guard let inputImage = self.ciImage else {
ImageError.ciImageError(self.ciImage).handle()
return self
}
wpaFilter.setValue(inputImage, forKey: kCIInputImageKey)
wpaFilter.setValue(whiteColor, forKey: kCIInputColorKey)
guard let output = wpaFilter.outputImage else {
ImageError.filterError(wpaFilter).handle()
return nil
}
guard let cgImage = context.createCGImage(output, from: output.extent) else {
ImageError.cgImageError(output, output.extent).handle()
return nil
}
return UIImage(cgImage: cgImage)
}
}
我们非常感谢您的帮助。我检查了UIImage是否在那里,它是。
过滤器也不起作用,但我没有时间检查出来。但是,如果有人有快速的解决方案,那么也将受到赞赏
更新
我替换了
guard let inputImage = self.ciImage
使用:
guard let inputImage = CIImage(image: self)
它开始工作了。但我真的不明白其中的区别。有人可以解释一下吗?