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?

Smitha
quelle

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

NikhilReddy
quelle
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
30

Es klappt:

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