OutOfMemory例外:压缩图像会减少堆大小吗?

dab*_*rju 5 android out-of-memory image-compression

我一直想问这个问题已经有一段时间了.我正在创建这个游戏,我绘制了一个非常大的背景.但问题是(当然),当我在游戏中添加更多元素时,我会得到OutOfMemory异常.

我一直想要问的是,压缩图像会减少堆大小分配吗?例如,我的PNG背景(3000 x 2000像素)大约是1.5 MB.经过一系列PNG压缩(通过TinyPNG和PNGGauntlet等软件)后,背景大小急剧减少到712 KB.这里的压缩图像仍然与原始图像相同(3000乘2000).

原始背景大小(1.5 MB)的堆大小分配是否与压缩(712 KB)相同?

Jos*_*arl 1

答案是肯定的,压缩和未压缩的图像占用相同的内存量 - 它们最终只是 R、G、B(、A) 值的网格。
唯一可以节省一些内存的情况是,如果您使用 GPU 直接支持的压缩形式(例如,针对 OpenGL 纹理的 S3TC 压缩)。

压缩减少了两件事:磁盘上的文件大小以及加载文件所需的 IO 时间(尽管这种节省可能会被解压缩过程抵消)。

不过,您可以考虑将图像加载到 ARGB_8888 以外的位图类型(例如 RGB_565)——这将减少存储位图所需的内存量(但图像的质量会降低)。