title: How to crop image using coordinates in android?
body: <p>Hi i can able to crop image either rectangle shape or vowel shape,here in both case  4 coordiante points based those points we are cropping image those are left  middle  point,right side middle point,top and bottom middle point but,my requirement is i need to crop image based on 8 coordinates,what above i mentioned those 4 coordinates and remain 4 is top of image starting edge 1 coordinate and top of image ending corner 1 coordinate,bottom of image starting one coordinate,ending of image another coordidnate,then image we can  crop different shapes,so i don't know how to crop images using 8 coordinates...using below code i can able crop image using 4 coordinates....any one help me please</p>
  
  <pre><code>   MainActivity .class:
    public class MainActivity extends Activity {
  private Uri mImageCaptureUri;
  private ImageView mImageView;
  
  private static final int PICK_FROM_CAMERA = 1;
  private static final int CROP_FROM_CAMERA = 2;
  private static final int PICK_FROM_FILE = 3;
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
  
      setContentView(R.layout.main);
  
      final String [] items           = new String [] {"Take from camera", "Select from gallery"};                
      ArrayAdapter&lt;String&gt; adapter    = new ArrayAdapter&lt;String&gt; (this, android.R.layout.select_dialog_item,items);
      AlertDialog.Builder builder     = new AlertDialog.Builder(this);
  
      builder.setTitle("Select Image");
      builder.setAdapter( adapter, new DialogInterface.OnClickListener() {
          public void onClick( DialogInterface dialog, int item ) { //pick from camera
              if (item == 0) {
                  Intent intent    = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  
                  mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),
                                     "tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));
  
                  intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
  
                  try {
                      intent.putExtra("return-data", true);
  
                      startActivityForResult(intent, PICK_FROM_CAMERA);
                  } catch (ActivityNotFoundException e) {
                      e.printStackTrace();
                  }
              } else { //pick from file
                  Intent intent = new Intent();
  
                  intent.setType("image/*");
                  intent.setAction(Intent.ACTION_GET_CONTENT);
  
                  startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_FILE);
              }
          }
      } );
  
      final AlertDialog dialog = builder.create();
  
      Button button   = (Button) findViewById(R.id.btn_crop);
      mImageView      = (ImageView) findViewById(R.id.iv_photo);
  
      button.setOnClickListener(new View.OnClickListener() {  
          @Override
          public void onClick(View v) {
              dialog.show();
          }
      });
  }
  
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      if (resultCode != RESULT_OK) return;
  
      switch (requestCode) {
          case PICK_FROM_CAMERA:
              doCrop();
  
              break;
  
          case PICK_FROM_FILE: 
              mImageCaptureUri = data.getData();
  
              doCrop();
  
              break;          
  
          case CROP_FROM_CAMERA:          
              Bundle extras = data.getExtras();
  
              if (extras != null) {               
                  Bitmap photo = extras.getParcelable("data");
  
                  mImageView.setImageBitmap(photo);
              }
  
              File f = new File(mImageCaptureUri.getPath());            
  
              if (f.exists()) f.delete();
  
              break;
  
      }
  }
  
  private void doCrop() {
      final ArrayList&lt;CropOption&gt; cropOptions = new ArrayList&lt;CropOption&gt;();
  
      Intent intent = new Intent("com.android.camera.action.CROP");
      intent.setType("image/*");
  
      List&lt;ResolveInfo&gt; 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("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();
          }
      }
  }
  </code></pre>