2013-04-16 26 views
4

我正在使用inBitmap在android3 +上加載位圖。但我總是得到java.lang.IllegalArgumentException: Problem decoding into existing bitmap.爲什麼使用inBitmap解碼位圖總是得到java.lang.IllegalArgumentException:將位圖解碼到現有的位圖

在LruCache的entryMoved()功能:我用reusableBitmaps.add(new SoftReference<Bitmap>(oldValue.getBitmap()));保留位圖。

,並在下一次加載位圖: 我用reusableBitmaps迭代找我可以使用inBitmap, 我使用iterator找哪一個,就像官方開發者網站管理內存哪一個。

但不幸的是,總是失敗,logcat的顯示java.lang.IllegalArgumentException: Problem decoding into existing bitmap.

任何人都可以給我一個樣品或教程?

+0

任何人都可以幫助我嗎? – myth2loki

+0

我也不斷收到它,即使我已經按照教程在這裏:http://www.youtube.com/watch?v=rsQet4nBVi8 –

回答

10

我固定此使用:

options.inSampleSize = 1; 

這是從在到問題的第二評論中提到的視頻的尖端。

+1

這似乎沒有必要在新的手機(棒棒糖及以上),但其遺漏是舊手機上的問題 – Hans

+0

我不知道 - 謝謝。 Docs表示KITKAT +默默地忽略了這一點。因此,如果minSdk auval

0

就我可以從位圖API推理而言,位圖是不可變的。 Bitmap類沒有公共構造函數。要創建一個,您必須將位圖的寬度和高度指定爲createBitmap方法之一。因此,您無法重新使用Bitmap實例。

但是,萬一我錯了,我猜錯誤仍然會與位圖保存位圖的寬度和高度有關,這決定了用於解碼位圖的字節緩衝區的大小。

如果您將不同分辨率的圖像解碼爲相同的位圖,這很可能會導致錯誤。

要排除故障,請嘗試使用您自己的相同代碼來解碼完全相同寬度和完全相同高度的圖像。如果你的錯誤消失了,那麼我的理論是正確的,並且當涉及到可重用的位圖時,你需要迎合圖像大小。

我對結果也很感興趣,所以如果你可以發表你的發現是很棒的。

乾杯