Leggendo un file immagine in bitmap da sdcard, perché ricevo una NullPointerException?


105

Come posso leggere un file immagine in bitmap da 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 );  

Ricevo una NullPointerException per bitmap. Significa che la bitmap è nulla. Ma ho un file di immagine ".jpg" memorizzato in sdcard come "flower2.jpg". Qual è il problema?

Risposte:


265

L'API MediaStore sta probabilmente buttando via il canale alfa (cioè la decodifica in RGB565). Se hai un percorso file, usa direttamente BitmapFactory, ma digli di usare un formato che preserva l'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
cosa c'è selected_photoqui?
Autonoma

Ciao! L'immagine salvata negli album è 3840x2160 ma l'immagine caricata sul server tramite questo metodo è di 1080x1920
Shajeel Afzal

@ ParagS.Chandakkar potrebbe essere un ImageView dove puoi visualizzare il file decodificato.
PinoyCoder


28

Prova questo codice:

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

Ho scritto il seguente codice per convertire un'immagine da sdcard a una stringa codificata Base64 da inviare come oggetto JSON e funziona benissimo:

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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.