2016-08-04 13 views
0

私のプログラムの目的は、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 
+0

なぜクラッシュしますか?あなたはクラッシュログを持っていますか? – babadaba

+0

はい、それから何も理解できません。 – DanielJames

+0

上記の質問で編集していただけますか?たぶん、他の人がそれを理解するでしょう。 – babadaba

答えて

0

は、共有ログから判断すると、次の変数はNULLになりそうです。

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

結果として、メソッドを呼び出すとクラッシュが発生しています。 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

.combineメソッドが実際に非ヌル出力を生成していることを確認してください。

+0

しかし、.combineメソッドはbm1自体を返しています。 – DanielJames

+0

bmFinalがnullでないかどうかチェックしましたか? – akdsouza

+0

@DanielJamesは、ログをさらに検査します。 '' '08-04 16:12:29.982 2888-5972/com.garnet.dany.geooverlay E/BitmapFactory:ストリームを解読できません:java.io.FileNotFoundException:マウント済み/ GeoOverlay/pic.jpg:open failed:ENOENT(そのようなファイルやディレクトリはありません) '' 'bm1自体にエラーがあるようです。 combineメソッドがbm1を返すと述べたので、 '' 'bm1 = BitmapFactory.decodeFile(Environment.getExternalStorageState()+" /GeoOverlay/pic.jpg ");' ' '。チェックしてください。 – akdsouza

関連する問題