2010-11-04 10 views
6

Estoy usando un LayerDrawable para unir Drawable múltiple. Ahora, me gustaría exportar mi LayerDrawable a un archivo.LayerDrawable to bitmap

He tratado de esta manera:

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

¿Qué puedo hacer yo?

Respuesta

12

¿Has probado a dibujar el Drawable en un lienzo de mapa de bits? Creo que el orden de las llamadas sería algo así como:

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

Luego puede escribir el objeto Bitmap en una secuencia de salida.

+0

Gracias. Creo que algo anda mal: con W = 550, H = 550, config = ARGB_8888, termino con W & H = -1 para el mapa de bits b. Si lo exporto a un archivo, la imagen está bien dimensionada pero está totalmente en blanco ... –

+4

Intenta llamar a setBounds en el Drawable. Si no le dices qué dibujar, no dibujará nada. –

+0

Gracias! Y finalmente descubrí por qué nunca he podido hacer algo con Bitmap.createBitmap :) –

4

Gracias por la ayuda. Pero un principiante como yo necesita un código más específico. Intenté y está trabajando para mí lo siguiente.

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

En última instancia, el b (Bitmap) es el mapa de bits combinado deseado.

1

Gracias a ambas personas han respondido antes que yo (@Kyle y @Anjum). Inspirado por sus respuestas ... Esto funcionó para mi caso bien:

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