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) } }
- 如何改变sectionIndexTitlesForTableView的字母颜色?
- navigationBar和MPMoviePlayerController极其怪异的行为。 在iOS中的错误或我的错误?