2017-02-21 20 views
0

Stringを使用してBitmapを作成します。問題は、塗料と文字列をCanvasに割り当てるときです。 作成したドット/黒のピクセルは、使用しているConfigsに問題がありますか?ここ は、以下の私のコードです:文字列を使用してビットマップを作成する

private void createBitmap(){ 
     int textSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 15, getApplicationContext().getResources().getDisplayMetrics()); 
     Paint paint = new Paint(); 
     paint.setAntiAlias(true); 
     paint.setSubpixelText(true); 
     paint.setStyle(Paint.Style.FILL); 
     paint.setTextSize(textSize); 
     paint.setColor(Color.BLACK); 

     int w = 500, h = 200; 

     Bitmap.Config conf = Bitmap.Config.ARGB_8888; // see other conf types 
     Bitmap myBitmap = Bitmap.createBitmap(w, h, conf); 
     Canvas myCanvas = new Canvas(myBitmap); 
     myCanvas.drawColor(Color.WHITE, PorterDuff.Mode.CLEAR); 
     myCanvas.drawText("Just a string", 0, 0, paint); 

     imageView = new ImageView(this); 
     imageView.setImageBitmap(myBitmap); 
} 

答えて

0

yパラメータは、テキストのベースラインのために実際にあるので、あなたが本当にy == 0と何も表示されません。あなたが見ているドットはおそらく "文字列"の "g"の下位文字です。

ので、少なくともあなたが何かを見ることができます

 myCanvas.drawText("Just a string", 0, 100, paint); 

に変更してみてください。

注:密度に基づいてテキストサイズを設定していますが、ビットマップを絶対ピクセルサイズにしているため、必要な外観を得るために計算を行う必要があります。

あなたのPaintを設定したら、あなたはFontMetrics値を見て、その後、PaintgetFontMetrics()を呼び出すことにより、ピクセル単位でのテキストの高さを決定することができます。 ascentは上向きに測定されているため、負の値になるので、高さの概要をfm.descent - fm.ascentで取得できます。ここで

はちょうどビットマップの上端の下にテキストを描画する方法です:

 Paint.FontMetrics fm = paint.getFontMetrics(); 
     int baseline = (int) - fm.ascent; // also fm.top instead of fm.ascent 
     myCanvas.drawText("Just a string", 0, baseline, paint); 
関連する問題