请帮助理解这里的错误.我已经尝试了Xcode 6.0.1和Xcode 6.1 beta 2.我有一个简单的扩展.
extension UIImage {
func saturate (toLevel level : Float) -> UIImage {
// create filter
let saturationFilter = CIFilter(name: "CIColorControls")
saturationFilter.setValue(self.CIImage, forKey: kCIInputImageKey)
saturationFilter.setValue(NSNumber.numberWithFloat(level), forKey: "inputSaturation")
// create context
let context = CIContext(options: nil)
// render image with filter
ERROR: let renderedImage = saturationFilter.valueForKey(kCIOutputImageKey) as CIImage
let imageRef = context.createCGImage(renderedImage, fromRect: renderedImage.extent())
return UIImage(CGImage: imageRef)
}
}
Run Code Online (Sandbox Code Playgroud)
但编译器说"使用未声明的类型'CIImage'".我勒个去?我试图导入CoreImage,但没有任何改变
Ion*_*Ion 17
为了避免该错误,您可以定义类型别名.
typealias MYImage = CIImage
Run Code Online (Sandbox Code Playgroud)
然后在您的类别中声明输入CIImage:
let inputImage = MYImage(image: self)
Run Code Online (Sandbox Code Playgroud)
似乎是Xcode中的错误,类型转换仅在扩展块内部失败,您可以使用CIImage类型的属性'outputImage'直接访问输出图像.无需使用valueForKey,请尝试以下代码
extension UIImage {
func saturate (toLevel level : Float) -> UIImage {
// create filter
let saturationFilter = CIFilter(name: "CIColorControls")
saturationFilter.setValue(self.CIImage, forKey: kCIInputImageKey)
saturationFilter.setValue(NSNumber.numberWithFloat(level), forKey: "inputSaturation")
// create context
let context = CIContext(options: nil)
// render image with filter
let renderedImage = saturationFilter.outputImage
let imageRef = context.createCGImage(renderedImage, fromRect: renderedImage.extent())
return UIImage(CGImage: imageRef)
}
}
Run Code Online (Sandbox Code Playgroud)
************************更新***********************
我认为在你的情况下ciImage,UIImage实例的属性是nil,这就是它崩溃的原因.请注意,UIImage事实上并非如此CIImage.换句话说,只有在已经支持的情况下(例如因为它是由imageWithCIImage :)生成的,UIImages CIImage才不是零.正如你似乎希望的那样,你无法用它来神奇地变成一个.UIImageCIImageUIImageCIImage
因此,您需要使用CIImage实例初始化图像,尝试这样来摆脱崩溃
let image = UIImage(named: "test")
let ciImage = CIImage(image: image)
let imageWithCIImage = UIImage(CIImage: ciImage)
imageWithCIImage.saturate(toLevel: 0.5)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2915 次 |
| 最近记录: |