2010-09-27 8 views
11

Zespół Hi stackoverflow mam problem z konwersją łańcucha base64 na bitmapę w Androidzie. Używam aparatu do pobierania obrazu i konwertuję obraz na ciąg base64, aby opublikować go na serwerze. Chcę pokazać ten obraz w widoku obrazu, więc jak mogę pokazać obraz w ImageView po pobraniu obrazu z kamery. pomóż mi rozwiązać problem.Kod Androida do konwersji base64 string na bitmapę

+3

Tylko dla lepszego zrozumienia: Dlaczego chcesz do kodowania obrazu w formacie base64, potem wysłać dekodowania go aby wyświetlić go ponownie w ImageView? Czy nie byłoby łatwiej pobrać go najpierw, wyświetlić w ImageView, a następnie zakodować go w base64, aby wysłać go na serwer? ^^ – Tseng

Odpowiedz

21

Zakładając, że dane zdjęcie jest w ciąg o nazwie myImageData dodaje powinno załatwić sprawę:

byte[] imageAsBytes = Base64.decode(myImageData.getBytes(), Base64.DEFAULT); 
    ImageView image = (ImageView)this.findViewById(R.id.ImageView); 
    image.setImageBitmap(
      BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length) 
    ); 

Do dekodowania Base64, można użyć http://iharder.sourceforge.net/current/java/base64/ jak Android nie zawiera Base64 wsparcia przed 2.2 .

Uwaga, w rzeczywistości nie uruchomiłem tego kodu, więc musisz dwukrotnie sprawdzić błędy.

+3

Czy to działa również dla png-ów zakodowanych w base64? – pfrank

+1

moim przypadku: 'bajt [] imageBitmap = Base64.decode (mEncodedImageData, \t \t \t \t \t \t \t Base64.DEFAULT); ' –

8

EDIT: Przyjęte stanowisko został zaktualizowany skopiować moją odpowiedź poniżej, albo są poprawne

Zaakceptowanych odpowiedź nie jest prawidłowa, przynajmniej w Jellybean KitKat lub lizak. Powinieneś użyć poniższych, które działa dla obrazów JPEG, PNG lub GIF.

byte[] imageAsBytes = Base64.decode(myImageData.getBytes(), Base64.DEFAULT); 
ImageView image = (ImageView)this.findViewById(R.id.ImageView); 
image.setImageBitmap(
     BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length) 
); 
+0

Tur - czy nie jest to ten sam kod co TuomasR (co jest zaakceptowaną odpowiedzią)? – AshesToAshes

+2

@AshesToAshes To jest teraz oni zaktualizowali swoją odpowiedź kopiuj kopalni (http://stackoverflow.com/posts/3801881/revisions) – Apqu

3

zapisz prosta metoda zabicia Base64 String i zwróci obiekt Bitmap

Bitmap Base64ToBitmap(String myImageData) 
    { 
     byte[] imageAsBytes = Base64.decode(myImageData.getBytes(),Base64.DEFAULT); 
     return BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length); 
    } 
+0

To działało dla mnie. Czy możesz wyjaśnić tę konwersję teoretycznie? –