2012-01-03 12 views
92

¿Cómo puedo leer un archivo de imagen en mapa de bits desde sdcard?Al leer un archivo de imagen en un mapa de bits desde una tarjeta SD, ¿por qué recibo una NullPointerException?

_path = Environment.getExternalStorageDirectory().getAbsolutePath(); 

System.out.println("pathhhhhhhhhhhhhhhhhhhh1111111112222222 " + _path); 
_path= _path + "/" + "flower2.jpg"; 
System.out.println("pathhhhhhhhhhhhhhhhhhhh111111111 " + _path); 
Bitmap bitmap = BitmapFactory.decodeFile(_path, options); 

Estoy obteniendo una NullPointerException para mapa de bits. Significa que el mapa de bits es nulo. Pero tengo un archivo de imagen ".jpg" almacenado en sdcard como "flower2.jpg". ¿Cuál es el problema?

Respuesta

231

La API de MediaStore probablemente esté descartando el canal alfa (es decir, descodificando a RGB565). Si usted tiene una ruta de archivo, sólo tiene que utilizar BitmapFactory directamente, sino que lo utilice un formato que conserva alfa:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
Bitmap bitmap = BitmapFactory.decodeFile(photoPath, options); 
selected_photo.setImageBitmap(bitmap); 

o

http://mihaifonoage.blogspot.com/2009/09/displaying-images-from-sd-card-in.html

+3

lo que se 'selected_photo' aquí? –

+3

Su ImageView ... –

+0

¡Hola! La imagen guardada en los álbumes es 3840x2160, pero la imagen cargada en el servidor a través de este método es de 1080x1920 –

22

probar este código:

Bitmap bitmap = null; 
File f = new File(_path); 
BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
try { 
    bitmap = BitmapFactory.decodeStream(new FileInputStream(f), null, options); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
}   
image.setImageBitmap(bitmap); 
5

Escribí el siguiente código para convertir una imagen de sdcard a una cadena codificada en Base64 para enviarla como un objeto JSON. Y funciona genial:

String filepath = "/sdcard/temp.png"; 
File imagefile = new File(filepath); 
FileInputStream fis = null; 
try { 
    fis = new FileInputStream(imagefile); 
    } catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} 

Bitmap bm = BitmapFactory.decodeStream(fis); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
bm.compress(Bitmap.CompressFormat.JPEG, 100 , baos);  
byte[] b = baos.toByteArray(); 
encImage = Base64.encodeToString(b, Base64.DEFAULT); 
20

Funciona:

Bitmap bitmap = BitmapFactory.decodeFile(filePath); 
Cuestiones relacionadas