我能找到的所有代码都围绕将图像直接加载到可视控件中。
但是,我有自己的缓存系统(从另一种语言转换项目),所以我尽可能高效地想要以下内容:
我是swift和ios平台的新手,但据我所知,cgimage尽可能接近?但是,在使用cgimage时,似乎没有办法从文件系统加载图像......但是我发现人们正在讨论例如UIImage,所以我现在怀疑我的初步印象ha cgimage是最符合我需求的。
答案 0 :(得分:27)
很容易在UIImage
,CGImage
和CIImage
之间感到困惑。区别在于:
UIImage: UIImage
对象是显示图像数据的高级方式。您可以从文件,Quartz
图像对象或您收到的原始图像数据创建图像。它们是不可变的,必须在初始化时指定图像的属性。这也意味着可以从任何线程安全地使用这些图像对象。
通常,您可以使用包含NSData
或PNG
表示图像的JPEG
对象,并将其转换为UIImage。
CGImage: A CGImage
只能代表位图。 CoreGraphics中的操作(例如混合模式和屏蔽)需要CGImageRefs
。如果您需要访问和更改实际的位图数据,可以使用CGImage
。它也可以转换为NSBitmapImageReps
。
CIImage: A CIImage
是一个表示图像的不可变对象。它不是一个图像。它只有与之关联的图像数据。它具有生成图像所需的所有信息。
您通常将CIImage
个对象与其他Core Image类结合使用,例如CIFilter
,CIContext
,CIColor
和CIVector
。您可以使用各种来源提供的数据创建CIImage对象,例如Quartz
2D图像,核心视频图像等。
需要使用各种GPU
优化的核心图像过滤器。它们也可以转换为NSBitmapImageReps
。它可以基于CPU或GPU。
总之,UIImage
正是您所寻找的。原因是:
You can get image from device memory and assign it to UIImage
You can write UIImage in your desired format to device memory
会添加代码示例,但所有这些都是Stackoverflow上已经回答的基本问题,所以没有意义。更不用说添加代码会使这不必要地变大。
总结差异的信用:Randall Leung
答案 1 :(得分:0)
您可以轻松地将图像加载到UIImage对象中......
NSData *data = [NSData dataWith...];
UIImage *image = [UIImage imageWithData:data];
如果您想要在视图中显示它,可以使用UIImageView
:
UIImageView *imageView = [[UIImageView alloc] init]; // or whatever
...
imageView.image = image;
在UIImage documentation中查看更多内容。
答案 2 :(得分:0)
根据https://developer.apple.com/documentation/uikit/uiimage
的文档let uiImage = uiImageView.image
let cgImage = uiImage.cgImage