2011-05-25 87 views
0

VM預算聞聽此事位大小超過Android的

05-25 23:55:59.145: ERROR/AndroidRuntime(3257): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 

在我的這個代碼 -

在活動課
Bitmap cs = null; 

    cs = Bitmap.createBitmap(frameImg.getWidth(), frameImg.getHeight(), Bitmap.Config.ARGB_8888); 

。如何解決這個問題:(

+0

那麼,到底有多大'frameImg'?如果它是巨大的,那麼你需要想出一個更好的方式來做任何你正在做的事情...... – Ryan 2011-05-25 23:04:32

回答

3

我從我的EVO ...從SD卡中選擇圖像時遇到類似的問題。相機將這些圖像保存在每片1MB以上,並且在某些情況下接近3MB。具有諷刺意味的是,當「拍照」時,Intent發送給你的位圖大小隻有大約40Kb。

我想出瞭解決的辦法是:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inSampleSize = 2; // this will cut the sampling by 50% 
Bitmap bitmap = BitmapFactory.decodeFile(imageFilePath, options); 

我能夠拍照,並通過增加因素數量削減他們下降到不足100 KB,並且圖像仍然相當不錯的品質。

這裏的底線是它阻止了OOME錯誤,從而防止我通過超出堆分配來破壞JVM。簡單 - 有效。

你可能會發現這樣一個有趣的閱讀也:BitmapFactory OOM driving me nuts

+0

工作就像一個魅力:) – nasaa 2011-05-26 19:51:38

+0

我解釋給人們的方式是「這就像讀一本書因此你可以跳過其他所有的路線......你仍然瞭解故事的本質,但是你在這個過程中放棄了一些細節。「 – BonanzaDriver 2011-05-27 16:43:56

1

使分辨率的位圖小,可能使用不同的文件格式..

0

Android有一個相對有限的量內存位圖(可以變得更小取決於什麼其他的裝置是怎麼回事)備用。所以其他的答案是正確的......

  • 規模下位(像素或分辨率)
  • 僅顯示用戶可見的位圖的子集。

檢查出Displaying a bitmap of arbitrary size without running out of memory爲背景下的內容 - 這可能會幫助您避免OOM。

0

hi @ user418366我在處理圖像時遇到了同樣的問題如果您使用模擬器,您可以創建最大的VM應用程序堆大小,以便您可以覆蓋此問題或者按照提示所有嘗試壓縮圖像的大小,確保它是一個損失較少的壓縮

相關問題