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?

Smitha
fuente

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

NikhilReddy
fuente
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
30

Funciona:

Bitmap bitmap = BitmapFactory.decodeFile(filePath);
Ahmad Arslan
fuente
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);
Jitendra
fuente
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);
Priyank Desai
fuente