2012-07-23 25 views
8

Estoy tratando de convertir una imagen de byte [] a mapa de bits para mostrar la imagen en la aplicación de Android.Android: ¿cómo convertir el conjunto de bytes a Bitmap?

El valor del byte [] se obtiene de la base de datos y comprobé que no era nulo. Después de eso, me gustaría convertir la imagen pero no pude tener éxito. El programa muestra que el valor de Bitmap es nulo.

Creo que hay algunos problemas en el proceso de conversión.

Si conoce algún consejo, muéstreme.

byte[] image = null; 
Bitmap bitmap = null; 
     try { 
      if (rset4 != null) { 
       while (rset4.next()) { 
        image = rset4.getBytes("img"); 
        BitmapFactory.Options options = new BitmapFactory.Options(); 
        bitmap = BitmapFactory.decodeByteArray(image, 0, image.length, options); 
       } 
      } 
      if (bitmap != null) { 
       ImageView researcher_img = (ImageView) findViewById(R.id.researcher_img); 
       researcher_img.setImageBitmap(bitmap); 
       System.out.println("bitmap is not null"); 
      } else { 
       System.out.println("bitmap is null"); 
      } 

     } catch (SQLException e) { 

     } 

Respuesta

6

Desde su código, parece que se toma una porción de la matriz de bytes y utiliza el método BitmapFactory.decodeByteArray en esa parte. Debe suministrar toda la matriz de bytes en el método BitmapFactory.decodeByteArray.

EDIT en los comentarios

Usted necesita cambiar su consulta de selección (o al menos saber el nombre (o índice) de la columna que tiene los datos blob de la imagen almacenada en su base de datos). También de getByte use el método getBlob de la clase ResultSet. Digamos que el nombre de la columna es image_data. Tener esta información, cambie su código para algo como esto:

byte[] image = null; 
Bitmap bitmap = null; 
    try { 
     if (rset4 != null) { 
       Blob blob = rset4.getBlob("image_data"); //This line gets the image's blob data 
       image = blob.getBytes(0, blob.length); //Convert blob to bytearray 
       BitmapFactory.Options options = new BitmapFactory.Options(); 
       bitmap = BitmapFactory.decodeByteArray(image, 0, image.length, options); //Convert bytearray to bitmap 
     //for performance free the memmory allocated by the bytearray and the blob variable 
     blob.free(); 
     image = null; 
     } 
     if (bitmap != null) { 
      ImageView researcher_img = (ImageView) findViewById(R.id.researcher_img); 
      researcher_img.setImageBitmap(bitmap); 
      System.out.println("bitmap is not null"); 
     } else { 
      System.out.println("bitmap is null"); 
     } 

    } catch (SQLException e) { 

    } 
+0

¡Gracias por su respuesta! Por favor, hágame saber cómo suministrar una matriz de bytes completa en ese método. – Benben

+0

¿Puedes especificar qué es la variable 'rset4'? Al ver tu código publicado, parece que tiene la matriz de bytes de tu imagen. – Angelo

+1

OK, rset4 es un valor de ResultSet para almacenar un resultado de ejecución de SQL. 'ResultSet rset4 = null; rset4 = stmt4.executeQuery ("select * from images where id =" + id); ' – Benben

12

utilizar por debajo de la línea para convertir bytes en mapa de bits, se está trabajando para mí.

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

que necesita para poner encima de la línea fuera del bucle, ya que toma Bytes matriz y convertir en mapa de bits.

P.S. : - aquí imageData es la matriz de bytes de la imagen

+0

Muchas gracias. Pero no funciona todavía ahora. También uso una matriz de bytes de imagen. ¿Hay algún problema en mi matriz de bytes ...? – Benben

Cuestiones relacionadas