Search code examples
androidimagecropsamsung-mobile

Android issue crop image on samsung s4


I'm trying to get crop image working on Samsung s4 but it's not showing the crop screen.

This is the code that I'm using.

 private void openCamera() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    intent.putExtra(MediaStore.EXTRA_OUTPUT,
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
    // ******** code for crop image
    intent.setType("image/*");
    intent.putExtra("crop", "true");
    intent.putExtra("aspectX", 3);
    intent.putExtra("aspectY", 4);
    intent.putExtra("outputX", 180);
    intent.putExtra("outputY", 220);

    try {

        intent.putExtra("return-data", true);
        startActivityForResult(intent, 1);

    } catch (ActivityNotFoundException e) {
        // Do nothing for now
        String s = e.getMessage();
        String test = e.getLocalizedMessage();
    }
}

Solution

  • Intent which you are using is for capturing image. You need to first capture image and then apply crop on it. Yo can do like this.

    private void openCamera() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    
    intent.putExtra(MediaStore.EXTRA_OUTPUT,
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
    
    try {
    
        intent.putExtra("return-data", true);
        startActivityForResult(intent, 1);
    
    } 
    catch (ActivityNotFoundException e) {
        // Do nothing for now
            }
    }
    

    onActivityResult where you get captured image. apply crop on that.

    private void performCrop() {
        try {
            Intent cropIntent = new Intent("com.android.camera.action.CROP");           cropIntent.setDataAndType(mUri, "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", 150);
            cropIntent.putExtra("outputY", 150);
            // retrieve data on return
            cropIntent.putExtra("return-data", true);
            // start the activity - we handle returning in onActivityResult
            startActivityForResult(cropIntent, 12);
        }
        // respond to users whose devices do not support the crop action
        catch (ActivityNotFoundException anfe) {
            // display an error message
            String errorMessage = "Whoops - your device doesn't support the crop action!";
            Toast.makeText(Signature.this, errorMessage, Toast.LENGTH_SHORT)
                    .show();
    
        }
    }