2016-06-28 98 views
1

首先,我知道Android对加载Bitmaps施加了一些严格的限制。我试图了解是否有一些简单的方法来加载和使用我需要的位图。BitmapFactory.decodeResource内存不足

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

无法分配一个125440012字节分配...

我很好奇,为什么它是围绕4倍所需要的大小分配的内存卡盘保持形象。这是预期还是出现了问题?我加载使用图像:

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

加载这个形象工程罚款我已经在尝试了所有iOS设备,它工作正常在Nexus 2013的平板电脑。不过,它在我用于测试的Android手机上失败。

我一定会避免加载图像的子区域并管理它们(使用类似BitmapRegionDecoder的东西)。任何关于简单的尝试的想法?

+0

你的图像在哪个资源目录中?您可能会得到[默认缩放图像](http://stackoverflow.com/a/23047893/1676363) – ianhanniballake

回答

1

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

0

尝试调整大小的位图,所以它不会采取Android设备

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

我决定尝试第一次加载全分辨率图像来解决它的太多RAM。这在大多数设备上都能成功。我在try块中执行并捕获OutOfMemory异常。在catch块中,然后以降低的分辨率加载它,这将在夹点中工作。