2011-12-06 63 views
0

我試圖在我的ImageView的內容中添加一些內容,這些內容由資源中的Drawable表示。我知道資源中的所有Drawable默認情況下都是不可變的,但即使在我調用mutable()方法並從此Drawable獲得Bitmap將其傳遞給Canvas對象,我也會得到java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor。下面是代碼:從資源中修改位圖

Drawable homeImage = mHomeImage.getBackground(); // my ImageView 
homeImage.mutate(); 
Canvas c = new Canvas(((BitmapDrawable)homeImage).getBitmap()); 

有沒有什麼辦法可以修改此Bitmap,而無需創建它的副本?

回答

1

試試這個

Bitmap bmp1 = (((BitmapDrawable)homeImage).getBitmap()) 
     .copy(Config.ARGB_8888, true); 
Canvas c = new Canvas(bmp1); 

您需要創建畫布新位圖。由於畫布使用我們傳遞的位圖來存儲繪製的內容,位圖應該是可變的。

+0

謝謝你的迴應,但正如你看到我問:有沒有辦法修改此位圖**而不創建它的副本**? – teoREtik

+0

我剛纔看到你的問題。我只是把上面的代碼作爲你的問題中的代碼不起作用。我不認爲你可以修改位圖而不創建它的副本。如果你正試圖在imageview上繪製一些東西。創建一個新的位圖並將新的東西繪製到新的位圖中,然後使用framelayout將視圖堆疊在一起。它將顯示爲單一視圖。 – blessenm

+0

不,我的目標是在圖像頂部繪製wifi信號的狀態,每3秒鐘聽一次網絡速度,並且在複製'Bitmap'的情況下我擔心內存消耗,但不要緊,謝謝您的迴應。 – teoREtik