Создать растровое изображение, используя строку
Я хочу создать Bitmap
с использованием String
, Проблема в том, когда я назначаю Paint и String Canvas
, Все, что я вижу, это созданный точечный / черный пиксель, что-то не так с конфигами, которые я использую? Вот мой код ниже:
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);
}
1 ответ
y
параметр на самом деле для базовой линии текста, так что вы ничего не увидите с y == 0
, Точка, которую вы видите, является, вероятно, спуском "g" в "строке".
Попробуйте перейти на
myCanvas.drawText("Just a string", 0, 100, paint);
по крайней мере, вы можете что-то увидеть.
Примечание. Вы устанавливаете размер текста на основе плотности, но вы делаете растровое изображение абсолютным размером в пикселях, поэтому вам придется выполнить некоторые вычисления, чтобы получить желаемый вид.
Как только у вас есть Paint
настроен, вы можете определить высоту текста в пикселях, вызвав getFontMetrics()
на Paint
затем, глядя на FontMetrics
ценности. 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);