2016-06-28 99 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塊中,然後以降低的分辨率加載它,這將在夾點中工作。