Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该在Swift iOS应用程序中使用UIImage还是CGImage?_Ios_Cgimage - Fatal编程技术网

我应该在Swift iOS应用程序中使用UIImage还是CGImage?

我应该在Swift iOS应用程序中使用UIImage还是CGImage?,ios,cgimage,Ios,Cgimage,我能找到的所有代码都围绕着将图像直接加载到视觉控件中 但是,我有自己的缓存系统(从另一种语言转换项目),因此我希望尽可能高效地实现以下目标: 加载jpg/png图像-可能加载到位图/cgimage中。(his可以来自文件系统,也可以来自在线下载的图像) 可能将图像另存为压缩/调整大小的png/jpg文件 为视觉控件提供图像参考 我对swift和ios平台还不熟悉,但据我所知,cgimage是最接近它的吗?但是,在使用cgimage时,似乎没有一种方法可以从文件系统加载图像。。。但我发现有人在

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

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

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

我对swift和ios平台还不熟悉,但据我所知,cgimage是最接近它的吗?但是,在使用cgimage时,似乎没有一种方法可以从文件系统加载图像。。。但我发现有人在讨论UIImage的方法,因此我现在怀疑我最初的印象,cgimage是否最适合我的需要。

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

NSData *data = [NSData dataWith...];
UIImage *image = [UIImage imageWithData:data];
如果您想在视图中显示它,可以使用
UIImageView

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

更多信息请参见。

很容易混淆
UIImage
CGImage
CIImage
。区别如下:

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

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

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

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

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


    汇总差异的积分:

    根据以下文档:

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