UIImage内存使用情况:png和jpg格式

4
在“文稿”目录中,我有两个文件,它们是使用相机拍摄的相同图像,其中一个文件使用UIImagePNGRepresentation保存,而另一个文件则使用UIImageJPEGRepresentation保存,即一个是png格式,另一个是jpg格式。
现在,在使用实际设备的工具时,如果我加载png文件(使用initWithContentOfFile:),则“真正的内存”从2.34 MB增加到2.43 MB。但是,如果我加载jpeg文件,则内存会从2.34 MB增加到超过23 MB!我发现无论加载任何png与jpeg文件都有类似的结果。
请问,有人能帮我理解这是为什么吗?

相关的是,我发现在iPhone上绘制PNG比JPG更高效。例如,在一个滚动的表视图中,将图片绘制到其单元格中,绘制包含JPG的imageview会使滚动不流畅且反应迟钝。简单地切换到PNG可以使滚动变得平滑和响应迅速。 - Ken Aspeslagh
2个回答

4

对于PNG文件,它可以直接将内存映射到存储器中,而对于JPG文件,它无法进行此操作,必须先解码。

如果你考虑一下,对于来自iPhone相机的1600x1200像素图像,23 MB是非常现实的,而0.09 MB则不足以容纳图像数据。


PNG是一种无损压缩格式。因此,它也必须进行解码。 - Yoshi
2
但是你可以在更多或更少的“原地”进行解压缩。对于JPG,您几乎必须将整个文件加载到内存中,并且从计算上讲,在运行时这样做并不实际。 - Kendall Helmstetter Gelner

0

苹果有一种特殊的非标准格式用于 PNG 文件,其中颜色字节的顺序与 iPhone 显示屏上的颜色条纹相同。当通过 Xcode 复制到应用程序包时,Png 图像资源会被重新编写。我怀疑在 iPhone 上将 PNG 表示用作图像时会进行特殊处理。


1
PNGRepresentation方法并不使用该压缩技术,否则其他任何程序都无法读取文件! - Kendall Helmstetter Gelner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接