2016-05-29 4 views
0

私はSwiftの簡単なcoreImageフィルタープロジェクトを開発しています。フィルターされた画像をオリジナルに戻すような機能を実現しようとしています。 SepiaToneフィルターに次のコードを使用しています.CIColorControls filter.Butを使用してフィルターをリセットしようとしていますが、致命的なクラッシュが発生しています。画像をリセットする方法は他にありません。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 
     } 

//私は私のResetFilter(UIButton)の内側に上記の関数を実行するかどうかは確認していない画像処理

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

を選択します。

ありがとうございました

答えて

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から元のイメージを取得しています。そのイメージライブラリをイメージライブラリから取得しています。ピッカービューのイメージを元のイメージに割り当てる方法がわかりません。私もcode.pleaseを更新して、あなたの考えを知ってもらいました。私はピッカービューについて言及するのを忘れました。 – Joe

+0

私は次のリンク[link](http://stackoverflow.com/questions/23789547/reset-button-to-original-image-from-filtered-image)で同様の質問を見つけました。しかし、私は問題をObj-cからSwiftへのコード... – Joe

+1

私は私の答えを更新しました。おそらくあなたはすでにそれを理解しているかもしれませんが、プロパティを "userImage"のように設定して、 'UIImagePickerController'からイメージを取得したときにそれを設定することができます。 – beyowulf

関連する問題