Al leer un archivo de imagen en un bitmap desde una tarjeta SD, ¿por qué recibo una NullPointerException?

¿Cómo puedo leer un archivo de imagen en bitmap desde sdcard?

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

Obtengo una NullPointerException para bitmap. Significa que el bitmap es nulo. Pero tengo un archivo de imagen “.jpg” almacenado en sdcard como “flower2.jpg”. ¿Cuál es el problema?

La API de MediaStore probablemente está tirando el canal alfa (es decir, descodificando a RGB565). Si tiene una ruta de archivo, simplemente use BitmapFactory directamente, pero dígale que use un formato que preserve 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

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

Funciona:

 Bitmap bitmap = BitmapFactory.decodeFile(filePath); 

Escribí el siguiente código para convertir una imagen de sdcard en 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);