En lisant un fichier image en bitmap à partir de sdcard, pourquoi est-ce que j'obtiens une NullPointerException?


105

Comment puis-je lire un fichier image en bitmap à partir d'une carte 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 );  

Je reçois une NullPointerException pour bitmap. Cela signifie que le bitmap est nul. Mais j'ai un fichier image ".jpg" stocké dans sdcard sous le nom "flower2.jpg". Quel est le problème?

Réponses:


265

L'API MediaStore est probablement en train de jeter le canal alpha (c'est-à-dire le décodage en RGB565). Si vous avez un chemin de fichier, utilisez simplement BitmapFactory directement, mais dites-lui d'utiliser un format qui préserve l'alpha:

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

ou

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


3
qu'y a- selected_photot-il ici?
Autonome

Salut! L'image enregistrée dans les albums est de 3840x2160 mais l'image téléchargée sur le serveur via cette méthode est de 1080x1920
Shajeel Afzal

@ ParagS.Chandakkar il peut s'agir d'un ImageView où vous pouvez afficher le fichier décodé.
PinoyCoder


28

Essayez ce code:

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

J'ai écrit le code suivant pour convertir une image de sdcard en une chaîne encodée en Base64 à envoyer en tant qu'objet JSON. Et cela fonctionne très 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);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.