2010-09-27 16 views
11

Hola equipo de stackoverflow tengo un problema al convertir cadena de base64 a mapa de bits en android. Estoy usando la cámara para buscar la imagen y estoy convirtiendo la imagen a la cadena base64 para publicar en el servidor. Quiero mostrar esa imagen en la vista de imagen, entonces, ¿cómo puedo mostrar la imagen en ImageView después de obtener la imagen de la cámara? Por favor ayudame a resolver el problema.Código de Android para convertir cadena de base64 a mapa de bits

+3

Sólo para una mejor comprensión: ¿Por qué quieres para codificar la imagen en base 64 en primer lugar, a continuación, enviar decodificarlo para volver a mostrarlo en ImageView? ¿No sería más fácil buscarlo primero, mostrarlo en ImageView y luego codificarlo en base64 para enviarlo al servidor? ^^ – Tseng

Respuesta

21

Suponiendo que los datos de imagen es de una serie llamada myImageData, la siguiente debe hacer el truco:

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

para la decodificación base 64, se puede utilizar como http://iharder.sourceforge.net/current/java/base64/ Android no contiene base 64 de soporte antes de la 2.2 .

Nota, en realidad no ejecuté este código, por lo que tendrá que verificar dos veces para detectar errores.

+3

¿Funcionará esto también para los png codificados en base64? – pfrank

+1

En mi caso: 'byte [] = imageBitmap Base64.decode (mEncodedImageData, \t \t \t \t \t \t \t Base64.DEFAULT); ' –

8

EDIT: Aceptado mensaje ha sido actualizado para copiar mi respuesta a continuación, o bien son correctas

La respuesta aceptada no es correcta al menos en JellyBean, KitKat o Lollipop. Debe usar lo siguiente que funciona para imágenes JPEG, PNG o 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: ¿no es el mismo código que TuomasR's (que es la respuesta aceptada)? – AshesToAshes

+2

@AshesToAshes Ahora han actualizado su respuesta para copiar la mía (http://stackoverflow.com/posts/3801881/revisions) – Apqu

3

Anote el Método sencillo pasar la base 64 de cuerdas y devolverá el objeto de mapa de bits

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

Esto funcionó para mí. ¿Puedes explicar esta conversión teoraticamente? –

Cuestiones relacionadas