【发布时间】:2019-04-25 11:34:08
【问题描述】:
我对何时使用 UIImage、CIImage 和 CGImage 感到困惑
它们之间有什么区别?我什么时候可以使用它们?
【问题讨论】:
我对何时使用 UIImage、CIImage 和 CGImage 感到困惑
它们之间有什么区别?我什么时候可以使用它们?
【问题讨论】:
UIImage
Apple 将 UIImage 对象描述为显示图像的高级方式 数据。您可以从文件、Quartz 图像对象或 从您收到的原始图像数据。它们是不可变的,必须指定 初始化时图像的属性。这也意味着 这些图像对象可以安全地从任何线程使用。通常你可以 获取包含 PNG 或 JPEG 表示图像的 NSData 对象和 将其转换为 UIImage。创建一个新的 UIImage,例如:
var newUIImage = UIImage(data: data)
//where data is a NSData
CIImage
CIImage 是表示图像的不可变对象。它不是一个 图片。它只有与之关联的图像数据。它拥有所有 生成图像所需的信息。您通常使用 CIImage 对象与其他核心图像类(如 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 创建一个 CG图像,
例如:
var aNewUIImage = UIImage(CGImage: imageRef)
//where imageRef is a CGImage
【讨论】:
它们分别属于不同的框架:UIKit、CoreImage 和 CoreGraphics。
通常,您使用UIImage,除非您有其他框架派上用场的特定用例(例如使用CoreImage 过滤器)。
【讨论】: