Warum erhalte ich eine NullPointerException, wenn ich eine Bilddatei von einer SD-Karte in eine Bitmap lese?


105

Wie kann ich eine Bilddatei von einer SD-Karte in eine Bitmap einlesen?

 _path = Environment.getExternalStorageDirectory().getAbsolutePath();  

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

Ich erhalte eine NullPointerException für Bitmap. Dies bedeutet, dass die Bitmap null ist. Aber ich habe eine Bild ".jpg" -Datei in SD-Karte als "Flower2.jpg" gespeichert. Was ist das Problem?

Antworten:


265

Die MediaStore-API wirft wahrscheinlich den Alphakanal weg (dh die Dekodierung in RGB565). Wenn Sie einen Dateipfad haben, verwenden Sie BitmapFactory direkt, aber weisen Sie es an, ein Format zu verwenden, das Alpha beibehält:

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

oder

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


3
was ist selected_photohier
Autonome

Hallo! Das in den Alben gespeicherte Bild ist 3840x2160, aber das Bild, das über diese Methode auf den Server hochgeladen wurde, ist 1080x1920
Shajeel Afzal

@ ParagS.Chandakkar Es kann sich um eine ImageView handeln, in der Sie die dekodierte Datei anzeigen können.
PinoyCoder


28

Versuchen Sie diesen 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

Ich habe den folgenden Code geschrieben, um ein Bild von einer SD-Karte in eine Base64-codierte Zeichenfolge zu konvertieren, die als JSON-Objekt gesendet werden soll. Und es funktioniert hervorragend:

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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.