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ę
Odpowiedz
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.
Czy to działa również dla png-ów zakodowanych w base64? – pfrank
moim przypadku: 'bajt [] imageBitmap = Base64.decode (mEncodedImageData, \t \t \t \t \t \t \t Base64.DEFAULT); ' –
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)
);
Tur - czy nie jest to ten sam kod co TuomasR (co jest zaakceptowaną odpowiedzią)? – AshesToAshes
@AshesToAshes To jest teraz oni zaktualizowali swoją odpowiedź kopiuj kopalni (http://stackoverflow.com/posts/3801881/revisions) – Apqu
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);
}
To działało dla mnie. Czy możesz wyjaśnić tę konwersję teoretycznie? –
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