我应该在Swift iOS应用中使用UIImage还是CGImage?
我能find的所有代码都是围绕直接将图像加载到可视化控件中。
然而,我有我自己的caching系统(从另一种语言转换项目),所以我尽可能高效的想要以下内容:
- 加载jpg / png图像 – 可能放入一个bitmap / cgimage。 (他可以从文件系统或从网上下载的图像)
- 可能将图像保存为压缩/resize的png / jpg文件
- 为视觉控制提供图像参考
我对swift和ios平台很陌生,但据我所知,cgimage是如此之近? 然而,似乎没有办法从他的文件系统加载图像时使用cgimage …但我已经find人们讨论如UIImage的方式,所以我现在怀疑我的最初印象哈cgimage是最好的匹配我的需求。
在UIImage
, CGImage
和CIImage
之间很容易混淆。 区别如下:
UIImage: UIImage
对象是显示图像数据的高级方法。 您可以从文件, Quartz
图像对象或从您接收的原始图像数据创build图像。 它们是不可变的,必须在初始化时指定图像的属性。 这也意味着这些图像对象可以安全地从任何线程使用。 通常情况下,您可以将包含PNG
或JPEG
表示图像的NSData
对象转换为UIImage。
CGImage: CGImage
只能表示位图。 CoreGraphics中的操作,如混合模式和遮罩需要CGImageRefs
。 如果您需要访问和更改实际的位图数据,则可以使用CGImage
。 它也可以转换为NSBitmapImageReps
。
CIImage: CIImage
是表示图像的不可变对象。 这不是一个图像。 它只有与之相关的图像数据。 它具有生成图像所需的所有信息。 通常将CIImage
对象与其他Core Image类(如CIFilter
, CIContext
, CIColor
和CIVector
。 您可以使用各种来源(如Quartz
2D图像,Core Videos图像等)提供的数据创buildCIImage对象。需要使用各种GPU
优化的Core Image滤镜。 他们也可以转换成NSBitmapImageReps
。 它可以基于CPU或GPU。
总之, UIImage
是你在找什么。 原因是:
-
您可以从设备内存中获取图像并将其分配给UIImage
-
您可以从URL获取图像并将其分配给UIImage
-
您可以将UIImage以您需要的格式写入设备内存
-
您可以调整分配给UIImage的图像大小
-
一旦你分配了一个图像到UIImage,你可以直接在控件中使用该实例。 例如设置一个button的背景,设置为UIImageView的图像
会添加代码示例,但这些都是已经在Stackoverflow上已经回答的基本问题,所以没有意义。 更不用说添加代码会使这个不必要的大。
信贷总结差异: 兰德尔梁
你可以很容易地加载你的图像到一个UIImage对象…
NSData *data = [NSData dataWith...]; UIImage *image = [UIImage imageWithData:data];
如果你想在视图中显示它,你可以使用UIImageView
:
UIImageView *imageView = [[UIImageView alloc] init]; // or whatever ... imageView.image = image;
有关详细信息,请参阅UIImage文档 。
请按照以下文档: https : //developer.apple.com/documentation/uikit/uiimage
let uiImage = uiImageView.image let cgImage = uiImage.cgImage