The purpose of the camera for Android with cropping

I try to crop and resize the image when shooting with the camera, but I don’t understand what I’m doing wrong here - I can’t get the cropped image data, even if the file is correctly saved on the phone.

... public class Add extends Activity { private String imageFilePath; ... protected void onCreate(Bundle savedInstanceState) { ... imageFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/tmp/" + String.valueOf(System.currentTimeMillis()) + ".jpg"; imageFile = new File(imageFilePath); imageFileUri = Uri.fromFile(imageFile); Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri); intent.putExtra("crop", "true"); intent.putExtra("outputX", 600); intent.putExtra("outputY", 600); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("scale", true); intent.putExtra("return-data", true); startActivityForResult(intent, 0); ... } protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch(requestCode) { case 0 : { Bitmap bitmap = BitmapFactory.decodeFile(imageFilePath); } } } 

If I use intent.putExtra("crop", "true"); , imageFilePath returns null if it does not return the correct file.

Thank you for your help!

+5
source share
2 answers

Try it:

 private void doCrop() { final ArrayList<CropOption> cropOptions = new ArrayList<CropOption>(); Intent intent = new Intent("com.android.camera.action.CROP"); intent.setType("image/*"); List<ResolveInfo> list = getPackageManager().queryIntentActivities( intent, 0); int size = list.size(); if (size == 0) { Toast.makeText(this, "Can not find image crop app", Toast.LENGTH_SHORT).show(); return; } else { intent.setData(mImageCaptureUri); /* * intent.putExtra("outputX", 200); intent.putExtra("outputY", 200); */ intent.putExtra("outputX", int_Height_crop); intent.putExtra("outputY", int_Width_crop); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("scale", true); intent.putExtra("return-data", true); if (size == 1) { Intent i = new Intent(intent); ResolveInfo res = list.get(0); i.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); startActivityForResult(i, CROP_FROM_CAMERA); } else { for (ResolveInfo res : list) { final CropOption co = new CropOption(); co.title = getPackageManager().getApplicationLabel( res.activityInfo.applicationInfo); co.icon = getPackageManager().getApplicationIcon( res.activityInfo.applicationInfo); co.appIntent = new Intent(intent); co.appIntent .setComponent(new ComponentName( res.activityInfo.packageName, res.activityInfo.name)); cropOptions.add(co); } CropOptionAdapter adapter = new CropOptionAdapter( getApplicationContext(), cropOptions); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Choose Crop App"); builder.setAdapter(adapter, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { startActivityForResult( cropOptions.get(item).appIntent, CROP_FROM_CAMERA); } }); builder.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { if (mImageCaptureUri != null) { getContentResolver().delete(mImageCaptureUri, null, null); mImageCaptureUri = null; } } }); AlertDialog alert = builder.create(); alert.show(); } } } 

Cropoption ::

 package com.any; import android.content.Intent; import android.graphics.drawable.Drawable; public class CropOption { public CharSequence title; public Drawable icon; public Intent appIntent; } 
+11
source

Try to delete this line: intent.putExtra ("return-data", true);

You do not need to pass this. This line of code will allow you to get a bitmap according to the intent of the data. In this case, you get your bitmap from the URI.

0
source

Source: https://habr.com/ru/post/988026/


All Articles