2016-08-04 24 views
0

Ziel meines Programms ist es, ein Bild von SD-Karte, übergeben Sie es zu einer Funktion in der Klasse CombinePhotos (zusammen mit einem anderen Bild) und diese Funktion wird eines der beiden Bilder vom Typ Bitmap zurückgeben. Ich muss es mit dem auf der SD-Karte überschreiben. Das Folgende ist mein Code, aber es stürzt die ganze Zeit ab. Bitte hilf mir.Image Overwriting Android Studio

private void combinePhotos() throws IOException { 
    CombinePhotos combinePhotos = new CombinePhotos(); 
    Bitmap bm1 = BitmapFactory.decodeFile(Environment.getExternalStorageState() + "/GeoOverlay/pic.jpg"); 
    Bitmap bm2 = BitmapFactory.decodeResource(this.getResources(), R.drawable.sample); 
    Bitmap bmFinal = combinePhotos.combine(bm1, bm2); 
    File newFile = new File(Environment.getExternalStorageDirectory()+"/GeoOverlay/pic.jpg"); 
    FileOutputStream bos = new FileOutputStream(Environment.getExternalStorageDirectory()+"/GeoOverlay/pic.jpg"); 
    bmFinal.compress(Bitmap.CompressFormat.PNG,85,bos); 
    bos.flush(); 
    bos.close(); 
} 

Log:

08-04 16:12:29.982 2888-5972/com.garnet.dany.geooverlay E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: mounted/GeoOverlay/pic.jpg: open failed: ENOENT (No such file or directory) 
08-04 16:12:30.652 2888-5972/com.garnet.dany.geooverlay E/AndroidRuntime: FATAL EXCEPTION: Camera Background 
                      Process: com.garnet.dany.geooverlay, PID: 2888 
                      java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference 
                       at com.garnet.dany.geooverlay.CameraClass.combinePhotos(CameraClass.java:262) 
                       at com.garnet.dany.geooverlay.CameraClass.access$200(CameraClass.java:53) 
                       at com.garnet.dany.geooverlay.CameraClass$5.onImageAvailable(CameraClass.java:201) 
                       at android.media.ImageReader$ListenerHandler.handleMessage(ImageReader.java:648) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:148) 
                       at android.os.HandlerThread.run(HandlerThread.java:61) 
08-04 16:12:30.702 2888-2888/com.garnet.dany.geooverlay E/AndroidCameraApi: onPause 
+0

Warum stürzt es ab? Hast du ein Crashlog? – babadaba

+0

Ja, aber davon kann ich nichts verstehen. – DanielJames

+0

Können Sie es bitte in Ihrer Frage oben bearbeiten? Vielleicht werden andere Leute es verstehen. – babadaba

Antwort

0

von den Protokollen zu urteilen geteilt, sieht die folgende Variable null zu sein.

Bitmap bmFinal = combinePhotos.combine(bm1, bm2); 

Als Folge verursacht das Aufrufen einer Methode den Absturz. java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference

Stellen Sie sicher, dass die .combine-Methode tatsächlich eine Ausgabe ungleich null erzeugt.

+0

Aber die .combine-Methode gibt bm1 selbst zurück. – DanielJames

+0

Haben Sie überprüft, ob bmFinal nicht null ist? – akdsouza

+0

@DanielJames auf weitere Überprüfung der Protokolle '' 08-04 16: 12: 29.982 2888-5972/com.garnet.dany.geooverlay E/BitmapFactory: Kann Stream nicht decodieren: java.io.FileNotFoundException: eingehängt/GeoOverlay/pic.jpg: open failed: ENOENT (Keine solche Datei oder kein Verzeichnis) '' 'es scheint ein Fehler mit bm1 selbst zu sein. Da Sie erwähnen, dass die Kombinationsmethode bm1 zurückgibt, könnte es sein, dass bm1 null ist oder nicht, wenn Sie "Bitmap bm1 = BitmapFactory.decodeFile (Environment.getExternalStorageState() +" /GeoOverlay/pic.jpg ");" '. Bitte prüfe. – akdsouza