搜尋文章

2013年6月12日 星期三

android-canvas set bitmap IllegalStateException error

最近在android上試做了一個畫筆的功能

然後要能把畫的圖片儲存跟讀取

讀取的方法我是用BitmapFactory.decodeFile把檔案圖片轉成bitmap

然後再把這個bitmap畫在canvas上,但時候遇到了一個error

錯誤訊息是這樣的

java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor

股溝了一下發現也有人遇到這樣的問題

其原因是被載入的bitmap是不可被改變的,所以也不能用來畫在canvas上

如果是把bitmap帶入canvas的建構涵式的話就會出現上面的錯誤訊息

但如果是用canvas.setBitmap()的話只會出現這樣的錯誤訊息

java.lang.IllegalStateException

這一點真的想要抱怨一下android,錯誤訊息劈哩啪啦列了一大堆

唯一看到有用的訊息就是這一串然後也講得不清不楚了

但我想錯誤的原因應該都是一樣的,都是不可改變bitmap

解決的方法是把載入的bitmpa在複製一份出來用就好了~

Canvas mCanvas ;
File bimapFile = new File("mmt\sdcard","pic.png");
Bitmap orgBitmap = BitmapFactory.decodeFile(bimapFile.getAbsolutePath());
Bitmap copyBitmap = orgBitmap.copy(Bitmap.Config.ARGB_8888, true);

//用建構帶入bitmap或是用setBitmap方法帶入都可以
mCanvas = new Canvas(copyBitmap)

//or
//mCanvas = new Canvas();
//mCanvas.setBitmap(copyBitmap)

沒有留言:

張貼留言