我应该在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