为什么我不能在我的Swift iOS应用程序中使用CIFilter将图像反转为原始图像

我正在做一个简单的应用程序。 它有一个图像视图与预先加载的图像和一个button。 按下button时应该反转图像视图中的图像。

它第一次工作,但我希望它再次按下button时,将图像反转回原来的forms。 然而它在第二次按下button时崩溃。

以下是来自ViewController.swift的相关代码:

  @IBOutlet weak var imageView: UIImageView! @IBOutlet weak var invertButton: UIButton! @IBAction func invertButtonPressed(sender: UIButton) { let beginImage = CIImage(image: imageView.image!) let filter = CIFilter(name: "CIColorInvert")! filter.setValue(beginImage, forKey: kCIInputImageKey) imageView.image = UIImage(CIImage: (filter.outputImage)!) } 

基本上, beginImage第二次成为nil ,我不知道为什么。 我已经尝试通过将这些密集的行分割为尽可能多的分配,但是这个CIImage构造函数发生了一些神秘的事情。 有任何想法吗?

问题是这一行:

 imageView.image = UIImage(CIImage: (filter.outputImage)!) 

你不能这样做。 CIImage不会奇迹般地变成UIImage。 图像视图需要基于位图的图像,而不是基于CIImage的图像。 你必须渲染 CIImage把它变成一个UIImage,或者通过获取一个CIContext并告诉它创buildCGImage或者通过将CIImage绘制到一个graphics上下文中。