Hey Leute,
Ich habe zwei Probleme.
Über meine App kann der Benutzer Bilder aus der Galerie auswählen oder ein Foto machen.
Direkt danach soll der Benutzer das jeweilige Bild Zuschneiden können mit "crop".
Problem 1.
Das direkte Cropen funktioniert zwar bei einem Bild das aus der Galerie gewählt wurde.
Mach ich aber ein Foto weis ich nicht wie ich konkret danach ein Crop ausführen kann ohne nochmal die Galerie aufzurufen.
Problem 2.
Ab und an bekomme ich die TransactionTooLargeException. (Wo kann man diese Exception überhaupt abfangen?)
Das diese entsteht beim austausch eines zugeschnittenen (croped) Bildes von dem Intent zu meiner App.
Ich nehme an das ich über das Intent das zugeschnittenen Bildes habe ich herausbekommen und das man es direkt speichern muss und es dann in OnActivityResult vom Device laden sollte.
Nur leider hat das irgendwie nicht so ganz geklappt mit ein paar beispielen aus dem Netz. Vielleicht hat da jemand eine beispiel Lösung zu meinem Code nochmal.
Hier meine Codeschnippsel:
String imageFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/CropPic.png";
File imageFile = new File(imageFilePath);
Uri imageFileUri = Uri.fromFile(imageFile); // convert path to Uri
chooseImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (sliderImages.size() < 6) {
try {
Toast.makeText(getContext(), imageFileUri.toString(), Toast.LENGTH_SHORT).show();
Intent imageDownload = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
imageDownload.setType("image/*");
imageDownload.putExtra("crop", "true");
imageDownload.putExtra("aspectX", 3);
imageDownload.putExtra("aspectY", 2);
imageDownload.putExtra("outputX", 200);
imageDownload.putExtra("outputY", 150);
imageDownload.putExtra("return-data", true);
imageDownload.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri);
imageDownload.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
startActivityForResult(imageDownload, SELECTED_PICTURE);
} catch (ActivityNotFoundException e) {
ErrorDefinition.sendExceptionToDB(getContext(), e);
} catch (Exception e) {
ErrorDefinition.sendExceptionToDB(getContext(), e);
}
} else {
Toast.makeText(getContext(), "Maximum of 6 pictures allowed.\n", Toast.LENGTH_SHORT).show();
}
}
});
takeFoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (sliderImages.size() < 6) {
try {
Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
captureIntent.putExtra("return-data", true);
captureIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri);
captureIntent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
startActivityForResult(captureIntent, CAMERA_CAPTURE);
} catch (ActivityNotFoundException e) {
ErrorDefinition.sendExceptionToDB(getContext(), e);
} catch (Exception e) {
ErrorDefinition.sendExceptionToDB(getContext(), e);
}
} else {
Toast.makeText(getContext(), "Maximum of 6 pictures allowed.\n", Toast.LENGTH_SHORT).show();
}
}
});
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case SELECTED_PICTURE:
if (resultCode == RESULT_OK) {
if (data != null) {
try {
Bundle extra = data.getExtras();
Bitmap bitmap = extra.getParcelable("data");
try {
bitmap = Utility.compressBitmap(getContext(), bitmap);
} catch (OutOfMemoryError e) {
ErrorDefinition.sendErrorToDB(getContext(), e);
Toast.makeText(getContext(), "Picture too big. ", Toast.LENGTH_SHORT).show();
}
if (bitmap != null)
sliderImages.add(bitmap);
refreshImageSlider();
} catch (Exception e) {
ErrorDefinition.sendExceptionToDB(getContext(), e);
}
}
}
break;
case CAMERA_CAPTURE:
if (resultCode == RESULT_OK) {
try {
Intent cropIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
cropIntent.setDataAndType(imageFileUri, "image/*");
cropIntent.putExtra("crop", "true");
cropIntent.putExtra("aspectX", 3);
cropIntent.putExtra("aspectY", 2);
cropIntent.putExtra("outputX", 200);
cropIntent.putExtra("outputY", 150);
cropIntent.putExtra("return-data", true);
cropIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri);
cropIntent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
startActivityForResult(cropIntent, SELECTED_PICTURE);
}
// respond to users whose devices do not support the crop action
catch (ActivityNotFoundException e) {
ErrorDefinition.sendExceptionToDB(getContext(), e);
Toast.makeText(getContext(), "This device doesn't support the crop action!", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
ErrorDefinition.sendExceptionToDB(getContext(), e);
}
}
break;
default:
break;
}
}
Alles anzeigen