Tomar una foto con android y cortarla

Tomar una foto con android es bien facil de hacer:

Tomar Foto

Permisos necesarios:

<uses-permission android:name="android.permission.CAMERA" />

Codigo:

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

//3434 es un int que esperaremos como resultado una vez sea tomada la foto.
startActivityForResult(intent, 3434);

Resultado:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if(resultCode == 3434){
        super.onActivityResult(requestCode, resultCode, data);

        Bitmap imagen = (Bitmap) data.getExtras().get("data");

        //una vez tenida la imagen hacer lo que se desee con esta.
    }
}

Cortar Imagen

Para poder cortarla podemos modificar el codigo que se uso para tomarla y tendriamos un resultado como este:

Para cortar una foto no necesariamente tiene que haber sido tomada con la camara, se puede tomar una foto de la galeria y cortarla directamente, solo hay que pasarle la url de la misma igual que se hace en este tutorial tomandola de la camara.


protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if(resultCode == 3434){
        super.onActivityResult(requestCode, resultCode, data);

        Bitmap imagen = (Bitmap) data.getExtras().get("data");

        //Este metodo nos retornara la url temporal de la imagen tomada
        Uri ulrImagen = data.getData();

        cropCapturedImage(ulrImagen);
    }else if(resultCode == 3535){

         //Este seria el bitmap de nuestra imagen cortada.
         Bitmap imagenCortada = (Bitmap) data.getExtras().get("data");
    }
}

public void cropCapturedImage(Uri urlImagen){

        //inicializamos nuestro intent
	Intent cropIntent = new Intent("com.android.camera.action.CROP");
	
	cropIntent.setDataAndType(urlImagen, "image/*");
	  
        //Habilitamos el crop en este intent
	cropIntent.putExtra("crop", "true");
	  
	cropIntent.putExtra("aspectX", 1);
	cropIntent.putExtra("aspectY", 1);
	  
	//indicamos los limites de nuestra imagen a cortar
	cropIntent.putExtra("outputX", 400);
	cropIntent.putExtra("outputY", 250);
	  
        //True: retornara la imagen como un bitmap, False: retornara la url de la imagen la guardada.
        cropIntent.putExtra("return-data", true);

        //iniciamos nuestra activity y pasamos un codigo de respuesta.
	startActivityForResult(cropIntent, 3535);
}

Y asi de simple y sencillo se toma y se corta una imagen con android.

Referencia

Camara

Activity for result