为什么 Android BitmapFactory.decodeFile() 需要 4 倍的内存?

Why does Android BitmapFactory.decodeFile() want 4x the memory needed?

我有一个 8MB 的 png,当我尝试将它加载到 Android ImageView 时,我得到一个 OutOfMemoryError,它说它试图分配 32MB 的内存但失败了。

我正在努力更改代码以对图像进行下采样以避免使用过多内存来避免这些问题中的大多数,因此我不是在寻找有关下采样的答案。我试图理解为什么图像的内存需求高于文件大小所暗示的。

为什么 Android 在加载 png 时尝试分配 4 倍的内存?

我已经设置了我的选项,告诉它不要针对像素密度进行缩放:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inScaled = false;

It is 2848 x 4209 pixels

ARGB_8888 的 4 bytes/pixel 速率下,Bitmap.

将是 47,948,928 字节

图像的磁盘大小代表一个红色鲱鱼。主要文件格式(尤其是 PNG 和 JPEG)被压缩为文件。那不重要。重要的是所需解码图像的分辨率和位深度。

另请注意,您的图像大于大多数 Android 设备的显示分辨率。根据您的用例,您可能希望考虑像 this one 这样的小部件,它们可以一次加载和显示部分图像。