我正在使用以下代码
从UIImage
加载NSData
var image = UIImage(data: data!)
然而,有一种奇怪的行为。
首先,我使用了png数据,而NSData
各占约80kB。
当我使用数据设置UIImage
时,UIImage
每次占用128kb。
(选中分配工具,ImageIO_PNG_Data
的大小)
然后我改为使用jpeg,NSData
每个约7kb。
但是,UIImage
每个都是128kb,所以在显示图像时我没有内存优势! (NSData
减少到80kb - > 7kb,而UIImage
占用相同的内存量
奇怪的是,当原始数据仅为7kb时,为什么UIImage
应该占用128kb?
我可以减少UIImage
的内存使用量而不缩小UIImage
本身的大小吗?
请注意,我不处理高分辨率图像,因此无法调整图像大小(NSData
已经是7kb !!)
任何帮助将不胜感激。
谢谢!
答案 0 :(得分:3)
当您访问NSData
时,通常会对其进行压缩(使用PNG
或JPEG
)。当您使用UIImage
时,有一个未压缩的像素缓冲区,通常每像素4个字节(分别为红色,绿色,蓝色和alpha的一个字节)。还有其他格式,但它说明了JPEG或PNG表示可以压缩的基本思想,当您开始使用图像时,它是未压缩的。
在您的结论中,您说调整大小不是一个选项,NSData
已经是7kb。我建议,如果图像的分辨率大于分辨率(bounds
/ frame
乘以设备规模的点数),则应考虑的大小调整您正在使用它的UIImageView
。是否调整大小的问题不是NSData
大小的函数,而是视图的分辨率。因此,如果您在表视图中的小拇指视图中使用了1000x1000像素的图像,那么无论JPEG表示有多小,您都应该大小调整图像大小。
答案 1 :(得分:1)
这很正常。当图像存储为NSData
时,它会被压缩(通常使用PNG或JPG压缩)。当它是UIImage
时,图像会被解压缩,这样就可以在屏幕上快速绘制。