【问题标题】:Should I use UIImage or CGImage in a Swift iOS App?我应该在 Swift iOS 应用程序中使用 UIImage 还是 CGImage ?
【发布时间】:2016-04-03 11:00:48
【问题描述】:

我能找到的所有代码都围绕着将图像直接加载到可视控件中。

但是,我有自己的缓存系统(将项目从另一种语言转换),因此我希望尽可能高效:

  • 加载 jpg/png 图像 - 可能是位图/cgimage。 (他可以来自文件系统或在线下载的图像)
  • 可能将图像另存为压缩/调整大小的 png/jpg 文件
  • 为视觉控件提供图像参考

我是 swift 和 ios 平台的新手,但据我所知,cgimage 是否尽可能接近?但是,似乎没有办法在使用 cgimage 时从文件系统加载图像......但我发现人们在讨论例如方法UIImage,所以我现在怀疑我的第一印象 ha cgimage 是否最适合我的需求。

【问题讨论】:

    标签: ios cgimage


    【解决方案1】:

    UIImageCGImageCIImage 之间很容易混淆。区别如下:

    UIImage: UIImage 对象是显示图像数据的高级方式。您可以从文件、Quartz 图像对象或您收到的原始图像数据创建图像。它们是不可变的,并且必须在初始化时指定图像的属性。这也意味着这些图像对象可以安全地从任何线程使用。 通常,您可以获取包含 PNGJPEG 表示图像的 NSData 对象并将其转换为 UIImage。

    CGImage: CGImage 只能表示位图。 CoreGraphics 中的操作,例如混合模式和遮罩需要CGImageRefs。如果您需要访问和更改实际的位图数据,可以使用CGImage。也可以转换成NSBitmapImageReps

    CIImage: CIImage 是表示图像的不可变对象。它不是图像。它只有与之关联的图像数据。它具有生成图像所需的所有信息。 您通常将CIImage 对象与其他Core Image 类结合使用,例如CIFilterCIContextCIColorCIVector。您可以使用从各种来源提供的数据创建 CIImage 对象,例如Quartz 2D 图像、Core Videos 图像等。 需要使用各种GPU 优化的核心图像过滤器。它们也可以转换为NSBitmapImageReps。它可以基于 CPU 或 GPU。

    总之,UIImage 就是您要找的。原因是:

    1. You can get image from device memory and assign it to UIImage

    2. You can get image from URL and assign it to UIImage

    3. You can write UIImage in your desired format to device memory

    4. You can resize image assigned to UIImage

    5. Once you have assigned an image to UIImage, you can use that instance in controls directly. e.g. setting background of a button, setting as image for UIImageView

    会添加代码示例,但所有这些都是在 Stackoverflow 上已经回答的基本问题,所以没有意义。更不用说添加代码会使它变得不必要地大。

    总结差异的功劳:Randall Leung

    【讨论】:

      【解决方案2】:

      您可以轻松地将图像加载到 UIImage 对象中...

      NSData *data = [NSData dataWith...];
      UIImage *image = [UIImage imageWithData:data];
      

      如果您想在视图中显示它,可以使用UIImageView

      UIImageView *imageView = [[UIImageView alloc] init]; // or whatever
      ...
      imageView.image = image;
      

      UIImage documentation 中查看更多信息。

      【讨论】:

        【解决方案3】:

        根据文档:https://developer.apple.com/documentation/uikit/uiimage

        let uiImage = uiImageView.image
        let cgImage = uiImage.cgImage
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-05-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多