我的问题如下:我使用uiviewcontroller和uiview(FilterView)创建了一个简单的应用程序。我的观点我添加了一个UIButton和一个UIImageView。我想要的是当你按下按钮时,SepiaFilter应用于图像:
func sepiaButtonClicked( sender:UIButton ){
let context = CIContext(options: nil)
let image = CIImage(image: theView.imageView.image)
let filter = CIFilter(name: "CISepiaTone", withInputParameters: [
kCIInputImageKey : image,
kCIInputIntensityKey : NSNumber(double: 0.5)
])
let imageWithFilter = filter.outputImage
theView.imageView.image = UIImage(CIImage: imageWithFilter)
}
theView引用了顶部的
这段代码的UIViewvar theView:FilterView {
get {
return view as! FilterView
}
}
现在,当我按下按钮时,过滤器被应用,因为我希望它发生,但是如果你之后再次按下它会给出一个致命的错误,并且在解开一个Optional值时意外地发现了nil。这是我认为的图像(我为kCIInputImageKey输入的图像)。
任何人都可以向我解释为什么会这样吗?我无法弄清楚按钮上的第一次和第二次点击之间的区别..我怎么看这个代码只是用新的代替UIImage而且它应该准备好再次触发?
提前,
Pieter-Jan De Bruyne
答案 0 :(得分:1)
试试这个:
func sepiaButtonClicked( sender:UIButton ){
var CurrentImage = self.imageView.image
var inputImage = CIImage(image:CurrentImage)
let filter = CIFilter(name:"CISepiaTone")
filter.setValue(inputImage, forKey: kCIInputImageKey)
filter.setValue(0.5, forKey: kCIInputIntensityKey)
let context = CIContext(options: nil)
let imageWithFilter = filter.outputImage
let NewOuptutImage = context.createCGImage(imageWithFilter , fromRect: imageWithFilter.extent())
imageView.image = UIImage(CGImage: NewOuptutImage)
}