Swift Core Image过滤过滤后的图像

时间:2015-08-18 18:55:11

标签: ios swift core-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
    }
}

现在,当我按下按钮时,过滤器被应用,因为我希望它发生,但是如果你之后再次按下它会给出一个致命的错误,并且在解开一个Optional值时意外地发现了nil。这是我认为的图像(我为kCIInputImageKey输入的图像)。

任何人都可以向我解释为什么会这样吗?我无法弄清楚按钮上的第一次和第二次点击之间的区别..我怎么看这个代码只是用新的代替UIImage而且它应该准备好再次触发?

提前,

Pieter-Jan De Bruyne

1 个答案:

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