私のプログラムの目的は、SDカードから画像を取得し、それをCombinePhotosクラスの関数に渡し(別の画像とともに)、その関数はBitmap型の2つの画像のうちの1つを返します。私はそれをSDカードのものに上書きします。以下は私のコードですが、いつもクラッシュしています。私を助けてください。Image 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();
}
ログイン:
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
なぜクラッシュしますか?あなたはクラッシュログを持っていますか? – babadaba
はい、それから何も理解できません。 – DanielJames
上記の質問で編集していただけますか?たぶん、他の人がそれを理解するでしょう。 – babadaba