首页 文章

我应该在Swift iOS应用程序中使用UIImage或CGImage吗?

提问于
浏览
7

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

但是,我有自己的缓存系统(从另一种语言转换项目),所以我尽可能高效地想要以下内容:

  • 加载jpg / png图像 - 可能是一个位图/ cgimage . (他可以来自文件系统,也可以来自在线下载的图像)

  • 可能将图像保存为压缩/调整大小的png / jpg文件

  • 为可视控件提供图像参考

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

3 回答

  • 24

    UIImageCGImageCIImage 之间很容易混淆 . 区别在于:

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

    CGImage: CGImage 只能代表位图 . CoreGraphics中的操作,例如混合模式和屏蔽需要 CGImageRefs . 如果需要访问和更改实际位图数据,可以使用 CGImage . 它也可以转换为 NSBitmapImageReps .

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

    总之, UIImage 正是您所寻找的 . 原因是:

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

    总结差异的信用:Randall Leung

  • 0

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

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

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

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

    UIImage documentation中查看更多信息 .

  • 0

    根据以下文件:https://developer.apple.com/documentation/uikit/uiimage

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

相关问题