我在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