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?

Smitha
la source

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

NikhilReddy
la source
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
30

Ça marche:

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