我在ImageView上顯示一個位圖,現在我想提供一個工具來寫該用戶在該位圖上鍵入的註釋。在位圖上寫評論
我嘗試使用
Canvas canvas = new Canvas(srcBitmap); canvas.drawText("Hello", 100,100,null);
但是這是給我下面的錯誤
java.lang.IllegalStateException: 不可變位通過
後來到畫布 構造上我想要將整個圖像保存爲位圖
我在ImageView上顯示一個位圖,現在我想提供一個工具來寫該用戶在該位圖上鍵入的註釋。在位圖上寫評論
我嘗試使用
Canvas canvas = new Canvas(srcBitmap); canvas.drawText("Hello", 100,100,null);
但是這是給我下面的錯誤
java.lang.IllegalStateException: 不可變位通過
後來到畫布 構造上我想要將整個圖像保存爲位圖
你從哪裏得到你的位圖?從例外情況來看,這意味着您正在使用無法修改的資源/資源(它在實際的apk中)。爲了避免這種情況,您需要複製位圖並將其用於畫布。在這裏你得到了一些examples工作。
正如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);
好吧,我裁剪該位圖,並將其存儲在一個臨時變量之後,我試圖通過複製它來創建可變的位圖,但現在我得到空指針異常,當我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
我想我是通過null(油漆(最後一個參數爲空),這是造成問題 – Hunt 2010-11-22 12:36:05
尋找副本.... http://developer.android.com/reference/android/graphics/Bitmap.html – ykatchou 2010-11-22 13:16:13