2010-11-22 59 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);