2010-11-04 14 views
6

Ich verwende ein Layer Drawable, um mehrere Drawable zusammenführen. Jetzt möchte ich meine LayerDrawable in eine Datei exportieren.LayerDrawable zu Bitmap

Ich habe auf diese Weise versucht:

Bitmap b = ((BitmapDrawable)myLayerDrawable).getBitmap(); 
--> ClassCastException... 

Was kann ich tun?

Antwort

12

Haben Sie versucht, die Drawable zu einem Bitmap-Canvas zu zeichnen? Ich denke, die Anrufreihenfolge würde etwas wie gehen:

Bitmap b = Bitmap.createBitmap(int width, int height, Bitmap.Config config); 
myLayerDrawable.draw(new Canvas(b)); 

Dann können Sie das Bitmap-Objekt in einen Ausgabestream schreiben.

+0

Danke. Ich denke, dass etwas nicht stimmt: mit W = 550, H = 550, config = ARGB_8888, lande ich mit W & H = -1 für die Bitmap b. Wenn ich es in eine Datei exportiere, ist das Bild schön groß, aber völlig leer ... –

+4

Versuchen Sie, SetBounds auf Drawable aufzurufen. Wenn Sie ihm nicht sagen, was zu zeichnen ist, wird es nichts zeichnen. –

+0

Danke! Und ich habe schließlich herausgefunden, warum ich nie etwas mit Bitmap.createBitmap machen konnte :) –

4

Danke für die Hilfe. Aber ein Anfänger wie ich braucht etwas spezifischeren Code. Ich habe versucht und es funktioniert für mich folgendes.

Bitmap b = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); 
layerDrawable.setBounds(0, 0, getWidth(), getHeight()); 
layerDrawable.draw(new Canvas(b)); 

Letztendlich ist das b (Bitmap) die gewünschte kombinierte Bitmap.

1

Vielen Dank haben beide vor mir geantwortet (@Kyle und @Anjum). Inspiriert von ihren Antworten ... Das funktionierte für meinen Fall gut:

final int width = myLayerDrawable.getIntrinsicWidth(); 
final int height = myLayerDrawable.getIntrinsicHeight(); 

final Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
myLayerDrawable.setBounds(0, 0, width, height); 
myLayerDrawable.draw(new Canvas(bitmap));