swift的UIImage,CIImage和CGImage有什么区别

时间:2019-04-25 11:34:09

标签: ios swift

我对何时使用UIImage,CIImage和CGImage感到困惑

它们之间有什么区别?什么时候可以使用它们?

2 个答案:

答案 0 :(得分:1)

UIImage

  

Apple将UIImage对象描述为显示图像的高级方法   数据。您可以从文件,Quartz图像对象或   从您收到的原始图像数据中。它们是不可变的,必须指定   初始化时图像的属性。这也意味着   这些图像对象可以从任何线程安全使用。通常你可以   获取包含PNG或JPEG表示图像的NSData对象,并   将其转换为UIImage。要创建一个新的UIImage,例如:

var newUIImage = UIImage(data: data)
//where data is a NSData

CIImage

  

CIImage是代表图像的不可变对象。这不是一个   图片。它仅具有与之关联的图像数据。它具有所有   产生图像所需的信息。您通常使用CIImage   对象与其他Core Image类(例如CIFilter,   CIContext,CIColor和CIVector。您可以使用创建CIImage对象   各种来源(例如Quartz 2D图像,Core)提供的数据   视频图像等。需要使用各种经过优化的GPU   核心图像过滤器。它们也可以转换为NSBitmapImageReps。   它可以基于CPU或GPU。要创建新的CIImage,

例如:

var newCIImage = CIImage(image: image)
//where image is a UIImage

CGImage

  

CGImage只能表示位图。 CoreGraphics中的操作,例如   因为混合模式和遮罩需要CGImageRefs。如果您需要访问   并更改实际的位图数据,可以使用CGImage。也可以是   转换为NSBitmapImageReps。从一个新的UIImage创建   CGImage,

例如:

var aNewUIImage = UIImage(CGImage: imageRef)
//where imageRef is a CGImage

答案 1 :(得分:0)

它们属于不同的框架:分别为UIKitCoreImageCoreGraphics

通常,您使用UIImage,除非您有一个特殊的用例,其中其他框架很方便(例如使用CoreImage过滤器)。