【发布时间】:2012-01-03 09:21:32
【问题描述】:
我知道 PNG 图像是压缩的,当作为 UIImages 加载到 UIImageView 时,它们在内存中占用的内存比原始文件多得多。这是否也适用于 JPG 图片?
【问题讨论】:
标签: objective-c ios cocoa-touch cocoa
我知道 PNG 图像是压缩的,当作为 UIImages 加载到 UIImageView 时,它们在内存中占用的内存比原始文件多得多。这是否也适用于 JPG 图片?
【问题讨论】:
标签: objective-c ios cocoa-touch cocoa
简短回答:是的。
长答案:JPEG 是一种有损压缩方案,可以压缩图像,使其比原始位图小几个数量级。 PNG 是一种无损压缩方案,因此无法实现与 JPEG 几乎一样好的压缩率。
正因为如此,一个非常小的 JPEG 文件在解压缩时会膨胀到很大,比任何类似的 PNG 文件都要大得多。
但是,您需要注意的是,一旦将图像作为位图加载到内存中,无论从什么类型的文件加载,它都会消耗可预测的内存量。
这是因为位图图像每像素使用精确的内存量(事实上,毫不奇怪,对于标准的 32 位图像,它是每像素 32 位)。因此,您可以通过将像素宽度乘以像素高度再乘以 4(即每字节 32 / 8 位)来轻松计算图像所需的内存(假设它是 32 位图像)。这将告诉您将图像的位图数据存储在 RAM 中需要多少字节。
因此,一个 640 x 480 像素的 32 位图像使用:640 * 480 * 4 = 1228800 字节,刚好超过 1 兆字节。使用此位图作为后备存储的 UIImage 对象会为此增加少量开销。
值得注意的是,在 iMac 等设备上使用的 Apple 27 英寸显示器的分辨率为 2560 x 1440。也就是说,仅保存桌面的位图图像就需要 14 兆字节的 RAM!
【讨论】: