2017-05-03 10 views
0

Ich habe den Android-Entwicklerleitfaden befolgt, um eine App zu erstellen, die eine vorhandene Kamera-App verwendet, um einige Fotos aufzunehmen. Als nächstes versuche ich, sie in eine Bildansicht mit diesem Teil der Anleitung https://developer.android.com/training/camera/photobasics.html#TaskScalePhoto setzen, aber BitmapFactory decodeFile gibt null zurück. Ich habe es auf den folgenden Code vereinfacht, aber es ergibt das gleiche Ergebnis.Warum gibt BitmapFactory decodeFile null zurück?

Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath); 
imageView.setImageBitmap(bitmap); 

mCurrentPhotoPath wurde image.getAbsolutePath() gesetzt und ein Beispiel ist Speicher// 0/Android/data // Dateien/Bilder/JPEG_20170503_102533_2060032401.jpg

emuliert den Wert harter Code kann ich mCurrentPhotoPath einer bekannten Foto und ich bekomme immer noch null.

Allerdings, wenn ich ersetzen, dass mit Speicher/emulierten/0/DCIM/Kamera/IMG_20161124_145814981_HDR.jpg (ein Foto erstellt separat meine Telefone normale Kamera App), dann funktioniert es.

Ich habe

uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" 

in meinem Manifest. Die 2 Dateien haben die gleichen Berechtigungen und sind ungefähr gleich groß. Ich kann sie woanders kopieren und sie scheinen gültige JPEG-Dateien zu sein. Irgendwelche Ideen, was könnte los sein?

Ich habe viele Beiträge durchgesehen und eine Reihe von Dingen einschließlich der unten stehenden Variation versucht, aber ich bekomme das gleiche Ergebnis.

File dest = new File(mCurrentPhotoPath); 
FileInputStream fis = null; 
fis = new FileInputStream(dest); 
Bitmap img = BitmapFactory.decodeStream(fis); 
smallPhoto.setImageBitmap(img); 
+0

Pfade beginnen mit '/'. Ich würde erwarten, dass alle von Ihnen scheitern, einschließlich der, von der Sie sagen, dass sie funktioniert. – CommonsWare

+0

Wahrscheinlich die falschen BitmapOptions übergeben. –

+0

der erste Pfad sieht fehlerhaft aus, hat doppelter '//' in der Mitte – LukeJanyga

Antwort

0

Sie müssen Ihr Bild durch die Optionsmethode skalieren.

File dest = new File(mCurrentPhotoPath); 
FileInputStream fis = null; 
fis = new FileInputStream(dest); 
BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inSampleSize = scale; 
Bitmap img = BitmapFactory.decodeStream(fis, options); 
smallPhoto.setImageBitmap(img); 
0

Ich sehe jetzt, dass das Verfahren mir ein Foto aufzunehmen bin mit schafft zwei Dateien: das eigentliche Bild in Speicher/emulierten/0/DCIM und in der Speicherbereich der App auf dem Handy erstellte Datei, Das Problem scheint also darin zu liegen, wie ich das Bild erstelle/speichere. Ich benutze hier Code https://developer.android.com/training/camera/photobasics.html#TaskPath aber habe vermutlich etwas falsch gemacht. Ich schließe das, schaue noch einmal nach und erhebe bei Bedarf eine neue Frage.

Verwandte Themen