2016-05-29 1 views
0

Je suis en train de développer un simple projet de filtre coreImage dans Swift.J'essaie d'obtenir une fonction comme la réinitialisation de l'image filtrée à l'original. J'utilise le code suivant pour le filtre SepiaTone et j'essaie de réinitialiser le filtre en utilisant le filtre CIColorControls. Mais je reçois un crash fatal. Je me demande s'il existe un autre moyen de réinitialiser l'image.Réinitialiser le filtre CoreImage dans Swift

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

// Choisissez Image Process

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

Je ne sais pas comment exécuter la fonction ci-dessus dans mon ResetFilter (UIButton).

Merci à l'avance

Répondre

1

Pourquoi ne pas tenir juste une référence à l'image originale? Par exemple:

@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

Merci pour le code. Je crois, le code que vous avez publié est déjà en cours d'exécution dans mon sous-projet à des fins de test. J'essaie d'implémenter le projet CIfilter dans mon projet principal, et j'obtiens l'image originale de UIImagePickerViewController qui saisit l'image de la photothèque. Je ne suis pas sûr de savoir comment assigner PickerVoir l'image comme une image originale et j'ai également mis à jour mon code. S'il vous plaît jeter un coup d'oeil et laissez-moi savoir ce que vous en pensez.Désolé, Mon mauvais j'ai oublié de mentionner sur le PickerView. – Joe

+0

J'ai trouvé une question similaire dans le lien suivant [lien] (http://stackoverflow.com/questions/23789547/reset-button-to-original-image-from-filtered-image). Mais, j'ai des problèmes pour convertir le code d'Obj-c à Swift ... – Joe

+1

J'ai mis à jour ma réponse. Peut-être l'avez-vous déjà compris, mais vous pouvez simplement définir une propriété comme "userImage" et la définir lorsque vous obtenez l'image de 'UIImagePickerController'. – beyowulf