Android - How to draw text on a bitmap

15.7.2011

ALERT: This article might be outdated and not fit for your needs. In order to enjoy its updated version, visit Android Guide To: Drawing Text Over Bitmap

This short article shows you how to draw text on bitmap loaded from resources. You can see also multiline version.

First we read bitmap from resources. This bitmap is immutable, so we create mutable copy. Then we create Paint object and set them text size, color, shadow, etc.

Now we are ready to draw! But where? We need to calculate position of the bottom left corner of drawn text. That’s all. Enjoy!

public Bitmap drawTextToBitmap(Context gContext, 
  int gResId, 
  String gText) {
  Resources resources = gContext.getResources();
  float scale = resources.getDisplayMetrics().density;
  Bitmap bitmap = 
      BitmapFactory.decodeResource(resources, gResId);
	
  android.graphics.Bitmap.Config bitmapConfig =
      bitmap.getConfig();
  // set default bitmap config if none
  if(bitmapConfig == null) {
    bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
  }
  // resource bitmaps are imutable, 
  // so we need to convert it to mutable one
  bitmap = bitmap.copy(bitmapConfig, true);
	
  Canvas canvas = new Canvas(bitmap);
  // new antialised Paint
  Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
  // text color - #3D3D3D
  paint.setColor(Color.rgb(61, 61, 61));
  // text size in pixels
  paint.setTextSize((int) (14 * scale));
  // text shadow
  paint.setShadowLayer(1f, 0f, 1f, Color.WHITE);
	
  // draw text to the Canvas center
  Rect bounds = new Rect();
  paint.getTextBounds(gText, 0, gText.length(), bounds);
  int x = (bitmap.getWidth() - bounds.width())/2;
  int y = (bitmap.getHeight() + bounds.height())/2;
	
  canvas.drawText(gText, x, y, paint);
	
  return bitmap;
}

EDIT 2013-11-16: Fixed bug in canvas.drawText() call. Variables x and y are no longer multiplied by scale.

EDIT 2015-11-14: Added link to multiline version.

Viktor De Pasquale

Comments

Author picture

Super inafvmotire writing; keep it up.

Reply
Load more

The Flashcard maker app Vocabulary Miner by Czech SKOUMAL Studio helps memorize vocabulary the user really needs. Now, topical Word lists tailored to the needs of expats and travelers are available in 12 languages. Users can effectively learn Czech, Serbian ...

Read post

Have you ever felt like Google Play is discriminating your app by rating in a long run? You are not alone. What is the real problem here? Google Play was re-branded from Google Market a few years back after it reached its full model capacity. Many features have been redone, removed ...

Read post

We, SKOUMAL Studio, develop mobile apps. We are strong believers in freedom, yet reliability, flat hierarchy yet careful attitude, and no rigidity, yet without anarchy. Our own product - language app Vocabulary Miner - needs to speak more languages to our students. That will be your job ...

Read post

All things considering you are probably using git to version your changes, if not here is a quick-start guide. You see I am a bit punctual towards my code and documenting its changes, I write extensive commit messages however I'm extremely reluctant to write changelogs for clients or users ...

Read post