1

Ich habe eine Anwendung, die ein PNG-Bild von etwas der Benutzer schreiben in das Textfeld ein (benutzerdefinierte Schriftart und Farbe)Erstellen Sie ein Bild von einem Textview (ohne Qualitätsverlust)

Was ich tue, ist etwas schaffen dies wie:

  1. Set Schriftart, Textfarbe und Text zu einem Textview (BG ist transparent)
  2. den Code unter Verwendung, erzeugen das Bild für das Textview

    Bitmap returnedBitmap = Bitmap.createBitmap(textView.getWidth(), textView.getHeight(), Bitmap.Config.ARGB_8888); 
    //Bind a canvas to it 
    Canvas canvas = new Canvas(returnedBitmap); 
    //Get the view's background 
    Drawable bgDrawable =textView.getBackground(); 
    if (bgDrawable!=null) 
        //has background drawable, then draw it on the canvas 
        bgDrawable.draw(canvas); 
    // draw the view on the canvas 
    view.draw(canvas); 
    
    FileOutputStream out = null; 
    
    out = new FileOutputStream(new File(filename)); 
    returnedBitmap.compress(Bitmap.CompressFormat.PNG, 100, out); 
    

Das Problem ist, dass die Qualität des erzeugten Bildes nicht das gleiche wie ist das, was im Textview angezeigt wird

Gibt es eine Möglichkeit, die Qualität zu verbessern?

Liegt das daran, dass TextView keinen Hintergrund hat? Wenn ja, gibt es einen Workaround dafür? Sie benötigen das erzeugte Bild nur als der Text, daher der transparenten Hintergrund

Dank

+0

Sie einen Screenshot kann http://stackoverflow.com/a/5651242/3257513 – Yoni

+0

Versuchen Sie 'textview.setDrawingCacheEnabled (true); Bitmap-Bitmap = Bitmap.createBitmap (textview.getDrawingCache()); textview.setDrawingCacheEnabled (false); ' –

+0

Ihre Bitmap-Größe hängt von der Breite und Höhe von textView ab, die (neben der Länge von text und textSize) von Bildschirmmetriken abhängt. Zum Beispiel haben Sie für mdpi eine Pixelhöhe von 100 Pixel und für xhdpi eine Pixelhöhe von 200 Pixel. Akzeptieren Sie dieses Konzept oder möchten Sie Bitmap mit strikter Höhe zurückgeben (das hängt nur von textSize ab)? –

Antwort

0

Ich glaube, die Qualität auf der Bildschirmgröße hängt von Ihnen das Bild zu erstellen. Ich schlage vor, Sie das Textview in einem FrameLayout zu setzen und die Bitmap aus dem FrameLayout erstellen ..

public static Bitmap loadBitmapFromView(View v) { 
Bitmap b = Bitmap.createBitmap(v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);     
Canvas c = new Canvas(b); 
v.layout(v.getLeft(), v.getTop(), v.getRight(), v.getBottom()); 
v.draw(c); 
return b; 

}

Verwandte Themen