Swift Core Image 滤镜过滤图像

Swift Core Image filter over filtered image

我的问题如下:我用 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就是上面这段代码的UIView

var theView:FilterView {
    get {
        return view as! FilterView
    }
}

现在,当我按下按钮时,过滤器会按我希望的方式应用,但如果您之后再次按下它,则会出现致命错误 'unexpectedly found nil while unwrapping an Optional value'。这是我认为的图像(我为 kCIInputImageKey 输入的图像)。

谁能解释一下为什么会这样?我无法弄清楚第一次和第二次单击按钮之间的区别。我怎么看这段代码只是用新的 UIImage 替换了 UIImage 并且应该准备好再次触发?

提前致谢,

彼得·扬·德布劳内

试试这个:

 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)
 }