<< Android-Note
文字列からBitmapへの変換方法
文字列を画像としてBitmapで取得すれば文字列を画像として扱えます。
文字列をただの画像として扱えるので回転させたり伸ばしたりできて便利です。
では早速文字列をビットマップ化するコードを紹介します。
String text = "Draw String"; //描画するテキスト Paint objPaint = new Paint(); Bitmap objBitmap; Canvas objCanvas; int textSize = 20; int textWidth = textSize * text.length(), textHeight = textSize; objPaint.setAntiAlias(true); objPaint.setColor(Color.RED); objPaint.setTextSize(textSize); FontMetrics fm = objPaint.getFontMetrics(); objPaint.getTextBounds(text, 0, text.length(), new Rect(0, 0, textWidth, textHeight)); //テキストの表示範囲を設定 textWidth = (int) objPaint.measureText(text); textHeight = (int) (Math.abs(fm.top) + fm.bottom); objBitmap = Bitmap.createBitmap(textWidth, textHeight, Bitmap.Config.ARGB_8888); //キャンバスからビットマップを取得 objCanvas = new Canvas(objBitmap); objCanvas.drawText(text, 0, Math.abs(fm.top), objPaint); ImageView imageView = findViewById(R.id.imageView); imageView.setImageBitmap(objBitmap);
このコードでやっていることはビットマップを元にしたキャンバスを作り、そのキャンバスに文字列を描画するだけで文字列のビットマップを得ることができます。
この例では大きさが20ピクセルで赤色の文字列が画像としてビューに描画されます。
注意点
文字列をビットマップ化にするときは次の点に注意したほうが良いことは次の点です。
- テキストサイズはピクセル
CanvasのsetTextSizeメソッドに渡せる文字の大きさはピクセルのみ指定でき、spなどの相対的(端末依存)な単位は使えません。
- 文字列のy座標は一番下に指定する
CanvasのdrawTextメソッドでテキストのy座標を指定するときは文字のもっとも下の座標を指定します。
- テキストの大きさの取得にFontMetricsを使う
- テキストにエスケープは使えない
タブや改行などを"\t"や"\n"などを使ってエスケープしても認識されないのでエスケープ文字は使えません。
このことに注意しておけば問題なく文字列をビットマップ化できます。
関連項目
© Kaz