Hallo,
um Fotos zu machen habe ich 2 Layouts (portrait und landscape, siehe Dateien). Bei Take picture wird die Camera geöffnet und das Foto wird dann in dem Layout angezeigt (siehe Datei), mit save picture dann abgelegt.
Problem:
Wenn ich nach dem Öffnen der Kamera von vertikal zu horizontal wechsle und fotografiere öffnet sich danach richtig das landscape-Layout, aber das Foto wird nicht angezeigt sondern die APP stürzt ab, leider ohne jede Fehlerkennung, außer image_uri istr nach dem Umkippen null ?
Code
private void openCamera() {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, "New Picture");
values.put(MediaStore.Images.Media.DESCRIPTION, "From the Camera");
image_uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri);
cameraActivityResultLauncher.launch(cameraIntent);
}
//TODO capture the image using camera and display it
ActivityResultLauncher<Intent> cameraActivityResultLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == Activity.RESULT_OK) {
Bitmap inputImage = uriToBitmap(image_uri);
Bitmap rotated = rotateBitmap(inputImage);
taskPicture.setImageBitmap(rotated);
fname = getRealPathFromURI(Bild_Activity.this, image_uri);
}
}
});
//TODO takes URI of the image and returns bitmap
private Bitmap uriToBitmap(Uri selectedFileUri) {
try {
ParcelFileDescriptor parcelFileDescriptor =
getContentResolver().openFileDescriptor(selectedFileUri, "r");
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
// Bitmap rotated = rotateBitmap(image);
parcelFileDescriptor.close();
return image;
// return rotated;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
Alles anzeigen