108 votes

En lisant un fichier image en bitmap à partir de la carte SD, pourquoi est-ce que je reçois une NullPointerException ?

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 la carte SD sous le nom "flower2.jpg". Quel est le problème?

274voto

Nikhilreddy Gujjula Points 1596

L'API MediaStore supprime probablement 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 alors

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

31voto

Arslan Ahmad Points 357

Ça marche:

 Bitmap bitmap = BitmapFactory.decodeFile(filePath);

29voto

Jitendra Points 588

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

6voto

Priyank Desai Points 101

J'ai écrit le code suivant pour convertir une image de la carte SD en une chaîne codé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);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X