2011-01-10 40 views
1

我有這個問題,當我嘗試做一個新的位圖一個又一個, 這樣的:創建位圖的一個子集,而不進行復印

first_data = Bitmap.createBitmap(data, 0, 0, data.getWidth()/2,data.getHeight()); 
second_data = Bitmap.createBitmap(data, data.getWidth()/2, 0, data.getWidth()/2, 
data.getHeight()); 

我遇到一個OutOfMemoryException ...

如果我只使用原始的完整圖像,我沒有遇到這個問題,我認爲Bitmap.createBitmap()複製了原始的第一個圖像。 有一種方法可以指定我不想複製那個? 非常感謝!

+0

檢查調試器中的寬度和高度。聽起來就像你在那裏傳遞過大的虛假價值。 – 2011-01-10 16:27:27

+0

我認爲它的工作原理正確,我只在HTC Magic中遇到過這個問題,如果我在Samsung Galaxy S中試用此代碼,一切都很好。 – pedr0 2011-01-10 16:44:26

回答

1

不幸的是,它似乎是:

  • 的BitMap.createBitmap()使用的是 簽名是 正確的方式,以「子集」的位圖
  • 同一方法的contract 允許它要麼在相同的字節返回一個視圖 複製它們

如果您或原始位圖是不可變的(isMutable()== false),這會鼓勵它返回基於相同字節數組的對象,而不是複製相同的內容。要獲得不可變的位圖,您可以嘗試createBitmap(Bitmap)並放棄對原始(和/或使用recycle())的所有引用?

相關問題