2010-11-22 54 views
1

我在ImageView上顯示一個位圖,現在我想提供一個工具來寫該用戶在該位圖上鍵入的註釋。在位圖上寫評論

我嘗試使用

Canvas canvas = new Canvas(srcBitmap); canvas.drawText("Hello", 100,100,null); 

但是這是給我下面的錯誤

java.lang.IllegalStateException: 不可變位通過

後來到畫布 構造上我想要將整個圖像保存爲位圖

回答

1

你從哪裏得到你的位圖?從例外情況來看,這意味着您正在使用無法修改的資源/資源(它在實際的apk中)。爲了避免這種情況,您需要複製位圖並將其用於畫布。在這裏你得到了一些examples工作。

+0

好吧,我裁剪該位圖,並將其存儲在一個臨時變量之後,我試圖通過複製它來創建可變的位圖,但現在我得到空指針異常,當我access canvas.drawText 代碼是#### final Drawable d = mPhotoView.getDrawable(); 位圖bOriginal =((BitmapDrawable)d).getBitmap(); 位圖bMutable = bOriginal.copy(Bitmap.Config.ARGB_8888,true); Canvas canvas = new Canvas(bMutable); canvas.drawText(「Hello」,200,200,null); – Hunt 2010-11-22 12:20:19

+0

我想我是通過null(油漆(最後一個參數爲空),這是造成問題 – Hunt 2010-11-22 12:36:05

+0

尋找副本.... http://developer.android.com/reference/android/graphics/Bitmap.html – ykatchou 2010-11-22 13:16:13

0

正如Moss指出的那樣,位圖需要是可變的。下面是一些源代碼,你可以怎麼做:

//first, get bitmap and make it mutable 
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon); 
Bitmap mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true); 
//now, create canvas and paint as you like 
Canvas canvas = new Canvas(mutableBitmap); 
Paint paint = new Paint(); 
paint.setColor(Color.RED); 
paint.setStrokeWidth(5); 
canvas.drawLine(0, 0, canvas.getWidth(), canvas.getHeight(), paint); 
//finally, convert back to icon 
Drawable icon = new BitmapDrawable(context.getResources(), mutableBitmap); 
getSupportActionBar().setIcon(icon);