2012-07-18 9 views
9

Wiem, dlaczego występuje wyjątek OutOfMemoryError.Ale istnieje jakikolwiek najlepszy sposób konwertowania tablicy bajtów na Bitmap.A I użyłem poniżej kodu, Ale gdy duży bajt to wymusić zamknięcie aplikacji i daje wyjątek OutOfMemoryError.Android Najlepszy sposób na konwersję tablicy bajtów na bitmapę?

I mam API to po prostu zwracaj mi tablicy bajtów nic więcej.

Bitmap bmp = BitmapFactory.decodeByteArray(bytearray, 0, bytearray.length); 
+0

Jak duży jest bytearray? Czy naprawdę jest to duży obraz? Być może obraz jest naprawdę duży dla pamięci telefonu i powinieneś go skompresować po stronie serwera, jeśli pobierasz go stamtąd. – DNax

+0

Zamówienie to ładne wyjaśnienie http://developer.android.com/training/displaying-bitmaps/load-bitmap.html – dhams

Odpowiedz

0

Prawdopodobnie masz do korzystania z tego następujący sposób (DOC, tej samej metody, ale z parametrem opcje):

public static Bitmap decodeByteArray (byte[] data, int offset, int length, BitmapFactory.Options opts) 

i grać z parametrem options. Mam nadzieję, że to ci pomoże =)

0

Możesz chcieć użyć biblioteki AQuery do załadowania swoich zdjęć, to pomoże Ci zmienić rozmiar, wyświetlić itp. I uniknąć najczęstszych wycieków pamięci. To narzędzie można znaleźć tutaj: http://code.google.com/p/android-query/

+0

Jak skonwertować bajt [] na mapę bitową za pomocą AQuery? – atasoyh

3

Oto, co działało dla mnie: zdjęcie to ciąg obrazu przy okazji.

byte[] imgbytes = Base64.decode(photo, Base64.DEFAULT); 
Bitmap bitmap = BitmapFactory.decodeByteArray(imgbytes, 0, 
imgbytes.length); 
imageupload.setImageBitmap(bitmap); 
4
Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapbytes , 0, bitmapbytes .length); 

Zwraca dekodowany bitmapę lub null, jeśli obraz nie może być dekodowania.