Lesen einer Bilddatei in Bitmap von SD-Karte, warum bekomme ich eine NullPointerException?

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

_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 ein Bild “.jpg” Datei in SD-Karte gespeichert als “flower2.jpg”. Was ist das Problem?

Die MediaStore-API wirft wahrscheinlich den Alpha-Kanal weg (dh Decodierung in RGB565). Wenn Sie einen Dateipfad haben, verwenden Sie einfach BitmapFactory direkt, aber sagen Sie ihm, dass er ein Format verwenden soll, das Alpha erhä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

Probieren Sie diesen Code aus:

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

Es klappt:

 Bitmap bitmap = BitmapFactory.decodeFile(filePath); 

Ich habe den folgenden Code geschrieben, um ein Bild von SD-Karte in eine Base64-codierte Zeichenfolge zu konvertieren, um sie als JSON-Objekt zu senden. Und es funktioniert großartig:

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