【问题标题】:What is the difference between UIImage, CIImage and CGImage in swift [duplicate]swift中的UIImage,CIImage和CGImage有什么区别[重复]
【发布时间】:2019-04-25 11:34:08
【问题描述】:

我对何时使用 UIImage、CIImage 和 CGI​​mage 感到困惑

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

【问题讨论】:

标签: ios swift


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    它们分别属于不同的框架:UIKit、CoreImage 和 CoreGraphics。

    通常,您使用UIImage,除非您有其他框架派上用场的特定用例(例如使用CoreImage 过滤器)。

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 2011-09-27
      相关资源
      最近更新 更多