我正在开发一个简单的应用程序。它具有带有预加载图像和按钮的图像视图。按下按钮时,应在图像视图中反转图像。
它是第一次工作,但是我希望当我再次按下该按钮时,它可以将图像转换回其原始形式。但是,第二次按下按钮时,它崩溃了。
这是来自的相关代码ViewController.swift:
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第二次左右,我不知道为什么。我尝试通过将这些密集的行分成尽可能多的let分配进行调试,但是该CIImage构造函数发生了一些神秘的事情。有任何想法吗?
beginImage
nil
let
CIImage
问题是这一行:
imageView.image = UIImage(CIImage: (filter.outputImage)!)
你不能那样做。CIImage不会神奇地变成UIImage。图像视图需要基于 位图 的图像,而不是基于CIImage的图像。您必须 渲染 CIImage才能将其转换为UIImage,方法是获取CIContext并告诉它创建CGImage,或者将CIImage绘制到图形上下文中。