将CIImage实例转换为CGImage实例然后仅转换为UIImage的原因

时间:2018-08-07 16:53:41

标签: ios swift uiimage cgimage ciimage

我正在阅读有关Core Image的文章,其中看到以下几行:

if let output = filter?.valueForKey(kCIOutputImageKey) as? CIImage {
    let cgimgresult = context.createCGImage(output, fromRect: output.extent)
    let result = UIImage(CGImage: cgimgresult)
    imageView?.image = result
}

如您所见,CIImage实例首先转换为CGImage实例,然后才转换为UIImage实例。经过一些研究,我发现它与图像视图范围内的图像比例有关。

我想知道的是,为什么我们需要进行所有这些转换的唯一原因(具有合适的显示比例)是因为UIImage已有一个带有CIImage实例的初始化程序作为论点?

1 个答案:

答案 0 :(得分:0)

在撰写的UIImage's reference

  

初始化的UIImage对象。在Objective-C中,如果ciImage参数为nil,则此方法返回nil。

就像@matt写道here

  

仅当UIImage已经由CIImage支持(例如,因为它是由imageWithCIImage:生成)时,UIImage的CIImage才不是nil。

因此,直接初始化

UIImage(ciImage: ciImage)

可以是nil

这就是为什么我们应该通过CGImage而不是CIImage来初始化UIImage