在位图上绘制文本失败
Posted
技术标签:
【中文标题】在位图上绘制文本失败【英文标题】:draw text on top of bitmap failed 【发布时间】:2011-02-15 10:51:31 【问题描述】:我想在图像上显示一个点和一个文本。我已经尝试了几个关于覆盖位图的教程,但它似乎不起作用。这是显示背景图像的代码。
mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.roomplan);
mIV = (ImageView)findViewById(R.id.ImageView01);
mIV.setImageBitmap(mBitmap);
mIV.invalidate();
btnDraw = (Button)findViewById(R.id.Button01);
btnDraw.setOnClickListener(this);
然后在 OnClickListener 上,我定义另一个位图并绘制点和文本。
Bitmap bmOverlay = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(),
Bitmap.Config.ARGB_4444);
Canvas canvas = new Canvas(bmOverlay);
Paint paint = new Paint();
paint.setColor(Color.CYAN);
paint.setTextSize(20);
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
canvas.drawText("You are here", 100, 100, paint);
canvas.drawPoint(30.0f, 50.0f, paint);
canvas.drawBitmap(bmOverlay, 0, 0, null);
即使我删除了图像,背景图像顶部也不会显示任何内容。请问有什么提示吗?
更新:工作代码
// get a reference to the background image
mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.raumplan_isst);
mIV = (ImageView)findViewById(R.id.ImageView01);
// create a mutable bitmap with the same size as the background image
Bitmap bmOverlay = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(),
Bitmap.Config.ARGB_4444);
// create a canvas on which to draw
canvas = new Canvas(bmOverlay);
Paint paint = new Paint();
paint.setColor(Color.CYAN);
paint.setTextSize(20);
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
// if the background image is defined in main.xml, omit this line
canvas.drawBitmap(mBitmap, 0, 0, null);
// draw the text and the point
canvas.drawPoint(fKoordX, fKoordY, paint);
canvas.drawText("You are here", fKoordX+3, fKoordY+3, paint);
// set the bitmap into the ImageView
mIV.setImageBitmap(bmOverlay);
【问题讨论】:
这很正常,您在绘制位图之前绘制文本并指向。当然你的位图会覆盖一切! 查看我的回答http://***.com/questions/7320392/how-to-draw-text-on-image/10313272#10313272 【参考方案1】:你用画布做什么?它在哪里使用? (发布更多代码...)
除了绘图顺序错误之外,您正在过度绘制文本并使用位图指向。
编辑:
我有点迷茫,因为我不知道你的哪些图像应该是背景以及你已经看到了什么图像......所以我猜 mBitmap(房间平面图)是你的背景?将其作为背景图像添加到您的布局中,然后使用 ImageView 来绘制您的叠加层...
如果您的 Overlay 也需要背景图片,请尝试:
// overlay background
canvas.drawBitmap(myBmp, 0, 0, paint);
// draw the text and the point
canvas.drawText("You are here", 100, 100, paint);
canvas.drawPoint(30.0f, 50.0f, paint);
如果您的 ImageView 应该将房间平面图作为背景,请尝试:
// overlay background
canvas.drawBitmap(mBitmap, 0, 0, paint);
// draw the text and the point
canvas.drawText("You are here", 100, 100, paint);
canvas.drawPoint(30.0f, 50.0f, paint);
【讨论】:
就是这样。第一个代码在onCreate()
方法中,第二个代码在OnClickListener
中。好的,既然我得到了关于绘图顺序的相同答案,我会试着玩一下然后回复你;)
您需要在某处应用画布。画布是你绘制的地方,但它必须在 UI 的某个地方使用,因为当你不使用它时,它不会显示出来......
@WarrenFaith 是的,明白了。现在我可以看到要点和文字,但仍然没有叠加的运气。能给个提示吗?
当你看到点和文本时,你应该不难像绘制点和文本一样绘制位图,但在它之前。如果没有,请用你所拥有的更新问题,请
@WarrenFaith 我已经把修改后的代码。我看不到应该在哪里设置背景图片。以上是关于在位图上绘制文本失败的主要内容,如果未能解决你的问题,请参考以下文章