Est-il possible de convertir un texte de chaîne contenu dans une boîte EditText
en une image bitmap? En d'autres termes, y a-t-il un moyen de convertir le texte d'une chaîne de caractères en bitmap en faisant en sorte que le texte s'affiche sous forme d'image?
Ci-dessous mon code:
class TextToImage extends Activity {
protected void onCreate(Bundle savedInstanceState) {
//create String object to be converted to image
String sampleText = "SAMPLE TEXT";
String fileName = "Image";
//create a File Object
File newFile = new File("./" + fileName + ".jpeg");
//create the font you wish to use
Font font = new Font("Tahoma", Font.PLAIN, 11);
//create the FontRenderContext object which helps us to measure the text
FontRenderContext frc = new FontRenderContext(null, true, true);
}
}
Vous pouvez créer une image bitmap de la taille appropriée, créer un canevas pour l'image bitmap, puis y dessiner votre texte. Vous pouvez utiliser un objet Paint pour mesurer le texte afin de connaître la taille requise pour le bitmap. Vous pouvez faire quelque chose comme ça (non testé):
public Bitmap textAsBitmap(String text, float textSize, int textColor) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
Paint.setTextSize(textSize);
Paint.setColor(textColor);
Paint.setTextAlign(Paint.Align.LEFT);
float baseline = -Paint.ascent(); // ascent() is negative
int width = (int) (Paint.measureText(text) + 0.5f); // round
int height = (int) (baseline + Paint.descent() + 0.5f);
Bitmap image = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(image);
canvas.drawText(text, 0, baseline, Paint);
return image;
}
essaye ça :
public static Bitmap drawText(String text, int textWidth, int textSize) {
// Get text dimensions
TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG
| Paint.LINEAR_TEXT_FLAG);
textPaint.setStyle(Paint.Style.FILL);
textPaint.setColor(Color.BLACK);
textPaint.setTextSize(textSize);
StaticLayout mTextLayout = new StaticLayout(text, textPaint,
textWidth, Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
// Create bitmap and canvas to draw to
Bitmap b = Bitmap.createBitmap(textWidth, mTextLayout.getHeight(), Config.RGB_565);
Canvas c = new Canvas(b);
// Draw background
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG
| Paint.LINEAR_TEXT_FLAG);
Paint.setStyle(Paint.Style.FILL);
Paint.setColor(Color.WHITE);
c.drawPaint(Paint);
// Draw text
c.save();
c.translate(0, 0);
mTextLayout.draw(c);
c.restore();
return b;
}
String text = "Hello world!";
Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
c.drawBitmap(b, 0, 0, null);
TextPaint textPaint = new TextPaint();
textPaint.setAntiAlias(true);
textPaint.setTextSize(16.0F);
StaticLayout sl= new StaticLayout(text, textPaint, b.getWidth()-8, Alignment.ALIGN_CENTER, 1.0f, 0.0f, false);
c.translate(6, 40);
sl.draw(c);
return b
J'ai adapté la réponse de @ TedHopp pour que l'image créée soit toujours carrée , ce qui peut être utile en fonction du lieu d'affichage de l'image, par exemple dans une icône NavigationDrawer
ou similaire. . Le texte est centré horizontalement au centre de l'image.
public static Bitmap textAsBitmap(String text, float textSize, int textColor) {
// adapted from https://stackoverflow.com/a/8799344/1476989
Paint paint = new Paint(ANTI_ALIAS_FLAG);
Paint.setTextSize(textSize);
Paint.setColor(textColor);
Paint.setTextAlign(Paint.Align.LEFT);
float baseline = -Paint.ascent(); // ascent() is negative
int width = (int) (Paint.measureText(text) + 0.0f); // round
int height = (int) (baseline + Paint.descent() + 0.0f);
int trueWidth = width;
if(width>height)height=width; else width=height;
Bitmap image = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(image);
canvas.drawText(text, width/2-trueWidth/2, baseline, Paint);
return image;
}
Pour seulement String je ne sais pas mais,
Vous obtiendrez Bitmap image of the whole EditText
non seulement String avec ceci,
mEditText.setCursorVisible(false);
mEditText.buildDrawingCache();
Bitmap bmp = Bitmap.createBitmap(mEditText.getDrawingCache());