2010-11-04 11 views
6

Używam LayerDrawable do scalania wielu Drawable. Teraz chciałbym wyeksportować moją warstwę LayerDrawable do pliku.LayerDrawable do bitmapy

Próbowałem w ten sposób:

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

, co mogę zrobić?

Odpowiedz

12

Czy próbowałeś narysować Drawable do płótna bitmapowego? Wydaje mi się, że zamówienie na wywołanie mogłoby wyglądać następująco:

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

Następnie można zapisać obiekt Bitmap do strumienia wyjściowego.

+0

Dzięki. Myślę, że coś jest nie tak: przy W = 550, H = 550, config = ARGB_8888, kończę z W & H = -1 dla Bitmapy b. Jeśli wyeksportuję go do pliku, obraz jest duży, ale całkowicie pusty ... –

+4

Spróbuj wywołać setBounds na Drawable. Jeśli nie powiesz, co narysować, nic nie narysuje. –

+0

Dzięki! I w końcu odkryłem, dlaczego nigdy nie byłem w stanie zrobić czegoś z Bitmap.createBitmap :) –

4

Dzięki za pomoc. Ale początkujący, jak ja, potrzebuje nieco bardziej szczegółowego kodu. Próbowałem i pracowałem dla mnie następująco.

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

Ostatecznie bit (b) jest pożądaną kombinowaną bitmapą.

1

Dziękuję obu osobom, które ode mnie odpowiedziały (@Kyle i @Anjum). Zainspirowani odpowiedziami ... To zadziałało w moim przypadku w porządku:

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)); 
Powiązane problemy