在位图上绘制文本

时间:2016-12-06 08:45:27

标签: android bitmap android-drawable

我正在尝试将文字放在地图标记上,但它总是出现在它下面。 首先,我将drawable转换为位图,然后在其上绘制文本。 drawable到位图转换工作正常,我只有文本覆盖问题。

enter image description here

我已经尝试过这些:

  1. Adding text to a bitmap in memory in Android
  2. https://stackoverflow.com/a/7328777/3423468
  3. https://stackoverflow.com/a/8831182/3423468
  4. 还有更多没有运气。

    这是我目前的方法:

    Bitmap drawableToBitmap(Drawable drawable)
        {
            var bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
            var canvas = new Canvas(bitmap);
            if (shouldDrawText)
            {
                Paint paint = new Paint();
                paint.setColor(Color.WHITE);
                paint.setStrokeWidth(40);
                paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); // Text Overlapping Pattern
    
                //canvas.drawBitmap(bitmap, 0, 0, paint);
                canvas.drawText("Testing...", 10, 10, paint);
            }
            drawable.SetBounds(0, 0, canvas.Width, canvas.Height);
            drawable.Draw(canvas);
            return bitmap;
        }
    

    任何想法我做错了什么?

1 个答案:

答案 0 :(得分:3)

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); // Text Overlapping Pattern

在这里你使用SRC_OVER,这意味着源将在DST之上。 DST是要绘制的新像素。

您应该使用DST_OVER在旧像素的顶部绘制新像素。

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OVER)); // Text Overlapping Pattern

请参阅此处概述porterduff的工作原理  enter image description here