CIFilter输出图像无

我正在使用核心图像,并将CIFilter棕褐色调应用于图像。 我在viewDidLoad中运行一次filter,然后立即调用另一个函数,再次添加filter。 出于某种原因,当我尝试访问输出图像,应用程序崩溃,并说输出图像是零。 任何人都知道这是为什么发生?

谢谢

import UIKit class ViewController: UIViewController { @IBOutlet weak var myimage: UIImageView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let image = CIImage(image: myimage.image) let filter = CIFilter(name: "CISepiaTone") filter.setDefaults() filter.setValue(image, forKey: kCIInputImageKey) myimage.image = UIImage(CIImage: filter.outputImage) self.reapplyFilter() } func reapplyFilter(){ let image = CIImage(image: myimage.image) let filter = CIFilter(name: "CISepiaTone") filter.setDefaults() filter.setVa lue(image, forKey: kCIInputImageKey) //ERROR HERE: fatal error: unexpectedly found nil while unwrapping an Optional value myimage.image = UIImage(CIImage: filter.outputImage) //ERROR } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

您不能调用UIImage(CIImage:)并使用该UIImage作为UIImageView的图像。 UIImageView需要一个由位图(CGImage)支持的UIImage。 用CIImage实例化的UIImage没有位图; 它没有实际的图像,这只是一组应用filter的说明。 这就是为什么你的UIImageView的图像是零。

这里有几件事情:

1)使用CIImage构造函数创build基于非CIImage支持的UIImage的CIImage是危险的,将返回零或空的CIImage。

2)创build图像时,我build议你使用CIContext而不是UIImage(CIImage :)。

例:

 class ViewController: UIViewController { @IBOutlet weak var myimage: UIImageView! override func viewDidLoad() { super.viewDidLoad() myimage.backgroundColor = UIColor.redColor() self.applyFilter() self.applyFilter() } func applyFilter(){ let image = CIImage(CGImage: myimage.image?.CGImage) let filter = CIFilter(name: "CISepiaTone") filter.setDefaults() filter.setValue(image, forKey: kCIInputImageKey) let context = CIContext(options: nil) let imageRef = context.createCGImage(filter.outputImage, fromRect: image.extent()) myimage.image = UIImage(CGImage: imageRef) } }