Позвольте пользователю обрезать изображение

Мне трудно понять, как позволить пользователю обрезать картинку. Я хотел бы дать переменную растрового изображения с загруженным растровым изображением, чтобы обрезать изображение, прежде чем устанавливать его в качестве обоев. Но я не могу сделать это ... Вот что я пытался.

Первая версия = Работает, как ожидалось, НО возвращаемое изображение в плохом разрешении. Изменение выхода на более высокое значение не помогает. Как я видел в некоторых постах, не рекомендуется использовать камеру, так как не все устройства поддерживают это.

Intent intent = new Intent("com.android.camera.action.CROP");  
String path = Images.Media.insertImage(context.getContentResolver(), loaded,null, null);
Uri uri = Uri.parse(path);              
intent.setData(uri);  
intent.putExtra("crop", "true");  
intent.putExtra("aspectX", 1);  
intent.putExtra("aspectY", 1);  
intent.putExtra("outputX", 300);  
intent.putExtra("outputY", 300);  
intent.putExtra("noFaceDetection", true);  
intent.putExtra("return-data", true);                                  
startActivityForResult(intent, 2);

Во-вторых. Загрузите средство выбора изображений и обрежьте его потом. Как я могу настроить это, чтобы загрузить кадрирование прямо на мое изображение? Прямо как в версии 1

Intent photoPickerIntent = new Intent(MediaStore.ACTION_PICK);
photoPickerIntent.setData(uri);
photoPickerIntent.putExtra("crop", "true");
photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(photoPickerIntent, 2);

И по действию результат

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_OK) { return; }
    if(requestCode == 2) {
        Bundle extras = data.getExtras();  
        if(extras != null ) {  
            Bitmap photo = extras.getParcelable("data");  
            loaded = photo;
        }
        WallpaperManager myWallpaperManager = WallpaperManager.getInstance(getApplicationContext());

        try {
            myWallpaperManager.setBitmap(loaded);
        } catch (IOException e) {}
    }
}

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

Обновить: Я все еще жду, когда кто-нибудь укажет, как это сделать правильно, ответы ниже работают, но возвращают изображения в плохом разрешении, поэтому их нельзя использовать.

Ответы на вопрос(4)

Ваш ответ на вопрос