2017-02-21 33 views
0

Я хочу создать 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); 
} 

ответ

0

Параметр y фактически для базовой линии текста, так что вы не будете действительно увидеть что-нибудь с y == 0. Точка, которую вы видите, вероятно, является descender из «g» в строке. изменения в

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

так по крайней мере, вы можете увидеть что-то

Try.

Примечание. Вы устанавливаете размер текста на основе плотности, но вы делаете растровое изображение абсолютным размером пикселя, поэтому вам нужно будет сделать некоторые вычисления, чтобы получить нужный вам вид.

После того, как у вас есть 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);