Al leer un archivo de imagen en mapa de bits desde sdcard, ¿por qué obtengo una NullPointerException?


105

¿Cómo puedo leer un archivo de imagen en un mapa de bits desde una tarjeta SD?

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

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

Recibo 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 "flor2.jpg". ¿Cuál es el problema?

Respuestas:


265

La API de MediaStore probablemente esté desechando el canal alfa (es decir, decodificando a RGB565). Si tiene una ruta de archivo, simplemente use BitmapFactory directamente, pero dígale que use un formato que conserve 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
que hay selected_photoaqui
Autónomo

¡Hola! La imagen guardada en los Álbumes es 3840x2160 pero la imagen cargada al servidor a través de este método es de 1080x1920
Shajeel Afzal

@ ParagS.Chandakkar puede ser un ImageView donde puede mostrar el archivo decodificado.
PinoyCoder


28

Prueba 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);

6

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 muy bien:

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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.