1

文字列をビットマップに変換しようとしていますが、最終的に解決策を見つけました:

public static Bitmap textToBitmap(Context c, String text, String typeface, int size, int color){



    Paint paint = new Paint();
    paint.setTextSize(size);
    paint.setTextAlign(Paint.Align.LEFT);
    paint.setAntiAlias(true);
    paint.setSubpixelText(true);
    paint.setColor(color);
    Typeface tf = Typeface.createFromAsset(c.getAssets(),typeface);
    paint.setTypeface(tf);
    int width = (int) (paint.measureText(text) + 0.5f); // round
    float baseline = (int) (paint.ascent()*(0.80f) + 0.5f);
    int height = (int) (paint.descent()*(0.5f) - paint.ascent()*(0.70f) + 0.5f);
    Bitmap image = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    int y = (int) (baseline*(-1));
    Canvas canvas = new Canvas(image);
    canvas.drawText(text, 0, y, paint);


    return image;

}

私の問題は、このソリューションがすべての画面でうまく機能せず (幅と高さが正しくないため)、少し粗いことです。

これを行うための最良のコードはありますか?

どうもありがとう...

4

1 に答える 1

1

サイズをピクセルで設定する代わりに、ディップで設定してからピクセルに変換します。このような

    final float density = context.getResources().getDisplayMetrics().density;
    final float textSizeDips = 10f;
    final float textSizePixels = Math.round(textSizeDips * density);

    paint.setTextSize(textSizePixels);

これにより、異なる画面での異なるテキスト サイズの問題が修正されます。

于 2012-09-26T16:35:07.227 に答える