2017-02-21 4 views
0

Je veux créer un Bitmap en utilisant le String. Le problème est lorsque j'affecte la peinture et la chaîne au Canvas. Tout ce que je vois est un pixel point/noir qui est créé quelque chose ne va pas avec les Configs que j'utilise? Voici mon code ci-dessous:Créer bitmap en utilisant une chaîne

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); 
} 

Répondre

0

Le paramètre y est en fait la base du texte, de sorte que vous ne verrez pas vraiment quoi que ce soit avec y == 0. Le point que vous voyez est probablement le descendant du "g" dans "string".

Essayez de changer

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

donc au moins vous pouvez voir quelque chose. Remarque: Vous définissez la taille du texte en fonction de la densité, mais vous définissez la taille de pixel absolue de l'image bitmap. Vous devrez donc effectuer un calcul pour obtenir l'apparence souhaitée.

Une fois que vous avez votre Paint configuré, vous pouvez déterminer la hauteur du texte en pixels en appelant getFontMetrics() sur la Paint, puis en regardant les valeurs FontMetrics. ascent sera négatif car il mesure vers le haut, de sorte que vous pouvez avoir une idée approximative de la hauteur par fm.descent - fm.ascent.

est ici un moyen d'attirer votre texte juste en dessous du bord supérieur du bitmap:

 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);