【发布时间】:2020-07-08 21:45:26
【问题描述】:
我有一个 8MB 的 png,当我尝试将其加载到 Android ImageView 中时,我得到一个 OutOfMemoryError,它说它试图分配 32MB 的内存但失败了。
我正在努力更改代码以对图像进行下采样以避免使用过多内存来避免大多数这些问题,因此我不是在寻找有关下采样的答案。我试图理解为什么图像的内存需求高于文件大小所暗示的。
为什么 Android 在加载 png 时尝试分配 4 倍的内存?
我已经设置了我的选项来告诉它不要缩放像素密度:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inScaled = false;
【问题讨论】:
-
您真的是指存储在文件中的 8MB PNG 吗? PNG是一种压缩图像格式;一个 8MB 的 PNG 绝对是巨大的。图片分辨率是多少?
-
@CommonsWare 是的,一个 8MB 的 png 存储为文件。它是 2848 x 4209 像素。我们有更大的 png 文件(25 MB 或更大,4032 × 5169 像素),我们正在使用下采样从磁盘加载较小的图像,但是如果没有下采样,系统在加载小至 3 MB png 文件的图像时会引发 OOM 错误次。
标签: android android-imageview android-bitmap