BitmapFactory.decodeResource内存不足

时间:2016-06-28 19:20:14

标签: android bitmap

首先,我意识到Android在加载位图时会施加一些严格的限制。我试图了解是否有一些简单的方法来加载和使用我需要的位图。

我有一个2800 x 2800 ARGB图像,我需要能够加载,放大和平移。一张2800 x 2880的ARGB图像应该占用大约31 MB的内存。我意识到这很重要。但是,当我尝试加载它时,我收到错误说

无法分配125,440,012字节分配...

我很好奇为什么要分配大约4倍于保存图像所需大小的内存。是预期还是发生了错误?我使用以下方式加载图片:

BitmapFactory.decodeResource( getResources(), resID, options );

加载此图片适用于我尝试过的所有iOS设备,并且在Nexus 2013平板电脑上运行正常。但是,我用于测试的Android手机失败了。

我当然希望避免加载图像的子区域并管理它们(使用类似BitmapRegionDecoder的东西)。有关简单尝试的想法吗?

3 个答案:

答案 0 :(得分:1)

Android文档有一个关于loading bitmpas efficiently的简单指南。基本上你需要在RAM中加载原始位图的缩小版本,因为你通常不需要加载一个非常大的位图只显示在屏幕的某个区域(假设你的屏幕最大分辨率为1920x1080,所以你浪费内存加载2800x2800位图。

答案 1 :(得分:0)

我决定首先尝试加载全分辨率图像来解决它。这在大多数设备上都能成功。我在try块中执行它并捕获OutOfMemory异常。在catch块中,然后以降低的分辨率加载它,这将在紧要关系中工作。

答案 2 :(得分:-1)

尝试调整位图大小,这样就不会占用Android设备太多的内存

Bitmap bitmap=BitmapFactory.decodeResource( getResources(), resID, options );
final Bitmap resized = Bitmap.createScaledBitmap(bitmap, 1280, 720, true);