2011-05-10 60 views
2

我試圖使用setBitMap將位圖圖像設置爲畫布,當時我得到了一個IllegalStateException。此畫布上有一些圖像,我試圖替換它。 任何人有任何想法爲什麼發生這種情況?向Canvas添加位圖時出現IllegalStateException

代碼段

editBm = Bitmap.createBitmap(951, 552, Bitmap.Config.ARGB_8888);  
     Canvas mCanvas=new Canvas(editBm); 
     eBit=LoadBMPsdcard(filePath); ---->returns a bitmap when the file path to the file is provided 
     Log.i("BM size", editBm.getWidth()+""); 
     mCanvas.setBitmap(eBit); 

我沒有得到任何空指針錯誤和方法LoadBMPsdcard()工作良好。

請讓我知道你有什麼想法?

在此先感謝

編碼快樂

+0

發佈您的logcat和LoadBMPsdcard()方法 – ingsaurabh 2011-05-10 07:41:45

回答

2

嘗試使用drawBitmap代替setBitmap。看起來你已經通過將位圖傳遞給畫布構造函數來設置一個位圖,所以現在你只需要在它上面繪製一切。

5

由於您正在加載位圖(eBit)並使用mCanvas.setBitmap(eBit)而不檢查位圖是否可變,因此可能會拋出IllegalStateException。這是需要繪製位圖。爲了確保您的位圖是可變的使用:

eBit=LoadBMPsdcard(filePath); 
Bitmap bitmap = eBit.copy(Bitmap.Config.ARGB_8888, true); 
canvas.setBitmap(bitmap); 
0

Canvas.setBitmap()拋出IllegalStateException當且僅當Bitmap.isMutable()返回true。 Bitmap.createBitmap()僅以其所有形式構建不可變的位圖實例。要創建一個可變位圖,您可以使用new Bitmap()Bitmap.copy(true),具體取決於您是否有要使用的源位圖。對我來說一個典型的塊的樣子:

Bitmap image = ... 
Canvas c = new Canvas(image.isMutable()?image:image.copy(true)); 
... 

這是假設,當然,前提是你不介意重挫源位圖(我一般不但是這絕不是普遍的)。

相關問題