Android получает URI обрезанного изображения из Intent

Я пытаюсь захватить изображение с камеры Android / выбрать изображение из галереи, а затем обрезать его перед выполнением других операций с ним. У меня проблемы с возвратом URI обрезанного изображения. Будем очень благодарны за любую помощь в том, как вернуть URI изображения после его обрезки!

Код ниже относится к моему onActivityResult и моей функции, выполняющей обрезку

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == SELECT_FILE || requestCode == REQUEST_IMAGE_CAPTURE) {
            if(!IS_CAMERA_USED) {
                selectedImageUri = data.getData();
            }
            performCrop();
        }
        else if(requestCode == CROP_IMAGE){
            selectedImageUri = data.getData();
            onSelectedImageResult();
        }
    }
}



    public void performCrop() {
    // take care of exceptions
    Display display = getWindowManager().getDefaultDisplay();
    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(selectedImageUri, "image/*");
        // set crop properties
        cropIntent.putExtra("crop", "true");
        // indicate aspect of desired crop
        cropIntent.putExtra("aspectY", 1);
        if(IS_PROFILE_PICTURE) {
            cropIntent.putExtra("aspectX", 1);
        }
        else {
            cropIntent.putExtra("aspectX", 2);
        }
        // indicate output X and Y
        cropIntent.putExtra("outputX", display.getWidth());
        cropIntent.putExtra("outputY", display.getHeight());
        // retrieve data on return
        cropIntent.putExtra("return-data", true);
        // start the activity - we handle returning in onActivityResult
        startActivityForResult(cropIntent, CROP_IMAGE);
    }
    // respond to users whose devices do not support the crop action
    catch (ActivityNotFoundException anfe) {
        Toast toast = Toast
                .makeText(this, "This device doesn't support the crop action!", Toast.LENGTH_SHORT);
        toast.show();
    }
}

Проблема в линии selectedImageUri = data.getData(), где data.getData() возвращает ноль после выполнения обрезки. Как мне вернуть URI обрезанного изображения? Я не хочу получать data.getExtras.getParcelable("data") так как это возвращает миниатюру и разрушает разрешение изображения.

Заранее спасибо!

2 ответа

Я думаю, что вы должны сохранить обрезанное растровое изображение в своем хранилище, а затем использовать URI обрезанного растрового изображения, чтобы выполнить что-то над ним! Я знаю, что это не профессиональная работа, но, по крайней мере, она должна делать это

Вы можете получить растровое изображение с этим кодом:

if (requestCode == CROP_IMAGE) {
    if (data != null) {
        Bundle extras = data.getExtras();
        if (extras != null) {
            Bitmap selectedBitmap = extras.getParcelable("data");

            //imgView.setImageBitmap(selectedBitmap);
        }
    }
}

URI не представляется возможным, потому что обрезанное изображение не сохраняется в хранилище.

Спасибо за все ваши ответы, но я нашел что-то более простое для включения и использования, которое позволяет избежать всех неприятностей из-за класса `com.android.camera.action.CROP', и это можно найти здесь

Другие вопросы по тегам