2016-05-29 61 views
0

我正在Swift中开发简单的coreImage过滤器项目。我试图实现将过滤后的图像重置为原始的功能。我为SepiaTone过滤器使用了以下代码,并且正在尝试使用CIColorControls过滤器重置过滤器。但是,我正在致命crash.I想知道是否有任何其他方式来重置图像。在Swift中重置CoreImage过滤器

 @IBOutlet weak var originalImage: UIImageView! 

     @IBAction func SepiaToneFilter(sender: AnyObject) { 
     let mySepiaFilter = CIFilter(name: "CISepiaTone") 
     mySepiaFilter!.setValue(CIImage(image: originalImage.image!), forKey: kCIInputImageKey) 
     let myOutputImage : CIImage = mySepiaFilter!.outputImage!    
     originalImage.image = UIImage(CIImage: myOutputImage) 
     } 

     @IBAction func ResetFilter(sender: AnyObject) { 

     let currentFilter = CIFilter(name: "CIColorControls") 
     let beginImage = CIImage(image: originalImage.image!) 
     currentFilter!.setValue(beginImage, forKey: kCIInputImageKey 
     let output = currentFilter!.outputImage 

     let cgimg = context.createCGImage(output!, fromRect: output!.extent) **//CreateWrappedSurface() failed for a dataprovider-backed CGImageRef.fatal error: unexpectedly found nil while unwrapping an Optional value 
    (lldb)** 

     let processedImage = UIImage(CGImage: cgimg) 
     originalImage.image = processedImage 
     } 

//选取图像处理

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) { 
    originalImage.image = image 
    self.dismissViewControllerAnimated(true, completion: nil); 
} 

我不知道怎么跑我ResetFilter(UIButton的)内部的上述功能。

在此先感谢

回答

1

为什么不只是对原始图像的参考?例如:

@IBOutlet weak var originalImage: UIImageView! 
    var userImage?:UIImage 

    @IBAction func SepiaToneFilter(sender: AnyObject) { 
     let mySepiaFilter = CIFilter(name: "CISepiaTone") 
     if let image = self.userImage { 
      mySepiaFilter!.setValue(CIImage(image: image), forKey: kCIInputImageKey) 
      let myOutputImage : CIImage = mySepiaFilter!.outputImage!    
      originalImage.image = UIImage(CIImage: myOutputImage) 
     } 
    } 

    @IBAction func ResetFilter(sender: AnyObject) { 
     if let image = self.userImage { 
      self.originalImage.image = image 
     } 

    } 


    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) { 
      self.userImage = image 
      originalImage.image = image 
      self.dismissViewControllerAnimated(true, completion: nil); 
    } 
+0

感谢代码。我相信,您发布的代码已经在我的子项目中运行,用于测试目的。我正在尝试将CIfilter项目实现到我的主项目,我从UIImagePickerViewController获取从照片库中获取图像的原始图像。我不知道如何将pickerView图像分配为原始图像,并且我还更新了我的代码。请仔细查看并让我知道您的想法。谢谢,我不喜欢PickerView。 – Joe

+0

我在以下链接中找到类似的问题[链接](http://stackoverflow.com/questions/23789547/reset-button-to-original-image-from-filtered-image)。但是,我遇到了麻烦转换代码从Obj-c到Swift ... – Joe

+1

我更新了我的答案。也许你已经知道了,但你可以设置一个属性为“userImage”,并设置当你从UIImagePickerController获得图像。 – beyowulf