Capturing an image and cropping it

I follow this guide: http://mobile.tutsplus.com/tutorials/android/capture-and-crop-an-image-with-the-device-camera/

I am trying to create a simple operation that has a “ take pictureButton and ImageView , and just take a picture, and then open the crop operation built into Android. However, I can open the camera without incident, however, taking a photo, the code does not send the photo to the cropping operation.

It seems to crash when a cropping operation is called. I am not sure why this is happening; I followed the example exactly (except for the XML source material, which I don't need), and I looked through the code and everything seems to make sense. I am sure this is a small mistake that causes this. Here is my activity code:

 package com.example.project; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; public class ImageChoose extends Activity implements OnClickListener { //keep track of camera capture intent final int CAMERA_CAPTURE = 1; //captured picture uri private Uri picUri; final int PIC_CROP = 2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_choose); Button takePicture = (Button)findViewById(R.id.takePicture); takePicture.setOnClickListener(this); } public void onClick(View v) { if (v.getId() == R.id.takePicture){ try{ //use standard intent to capture an image Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //we will handle the returned data in onActivityResult startActivityForResult(captureIntent, CAMERA_CAPTURE); }catch(ActivityNotFoundException anfe){ //display an error message String errorMessage = "Your device doesn't support photos!"; Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); toast.show(); } } } protected void onActivityResult(int requestCode, int resultCode, Intent data){ if (resultCode == RESULT_OK){ if (requestCode == CAMERA_CAPTURE){ picUri = data.getData(); performCrop(); }else if(requestCode == PIC_CROP){ //get the returned data Bundle extras = data.getExtras(); //get the cropped bitmap Bitmap thePic = extras.getParcelable("data"); //retrieve a reference to the ImageView ImageView picView = (ImageView)findViewById(R.id.picture); //display the returned cropped image picView.setImageBitmap(thePic); } } } private void performCrop(){ try{ //call the standard crop action intent (the user device may not support it) Intent cropIntent = new Intent("com.android.camera.action.CROP"); //indicate image type and Uri cropIntent.setDataAndType(picUri, "image/*"); //set crop properties cropIntent.putExtra("crop", "true"); //indicate aspect of desired crop cropIntent.putExtra("aspectX", 1); cropIntent.putExtra("aspectY", 1); //indicate output X and Y cropIntent.putExtra("outputX", 256); cropIntent.putExtra("outputY", 256); //retrieve data on return cropIntent.putExtra("return-data", true); //start the activity - we handle returning in onActivityResult startActivityForResult(cropIntent, PIC_CROP); }catch(ActivityNotFoundException anfe){ String errorMessage = "Your device doesn't support photo cropping!"; Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); toast.show(); } } } 
+2
source share
3 answers

I used this type of action. Here is my code with the following link: - Detailed description

Hope this helps you. I suggest you the following lines where you should focus: -

 Intent camera=new Intent(); camera.setAction(MediaStore.ACTION_IMAGE_CAPTURE); camera.putExtra("crop", "true"); 
+7
source

Cropping activity is part of the Android app for Android. It may or may not be available on your device, especially if you use the application for the camera / provider. If you want this to work reliably, you need to take the code for the trimmer and include it in your application.

0
source
 private void performCrop(){ } Inside this method we are going to call an Intent to perform the crop, so let's add "try" and "catch" blocks in case the user device does not support the crop operation: try { } catch(ActivityNotFoundException anfe){ //display an error message String errorMessage = "Whoops - your device doesn't support the crop action!"; Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); toast.show(); } //call the standard crop action intent (the user device may not support it) Intent cropIntent = new Intent("com.android.camera.action.CROP"); //indicate image type and Uri cropIntent.setDataAndType(picUri, "image/*"); //set crop properties cropIntent.putExtra("crop", "true"); //indicate aspect of desired crop cropIntent.putExtra("aspectX", 1); cropIntent.putExtra("aspectY", 1); //indicate output X and Y cropIntent.putExtra("outputX", 256); cropIntent.putExtra("outputY", 256); //retrieve data on return cropIntent.putExtra("return-data", true); //start the activity - we handle returning in onActivityResult startActivityForResult(cropIntent, PIC_CROP); //keep track of cropping intent final int PIC_CROP = 2; 
-1
source

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


All Articles