Вопрос

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

Тем не менее, намерение, которое я использую, просто не вернет никаких результатов, если обрезка была успешной.

Мой главный метод:

// Crop photo intent.
Intent intent = new Intent("com.android.camera.action.CROP", null);         
intent.setData(uri);   
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("aspectX", aspectX);
intent.putExtra("aspectY", aspectY);
intent.putExtra("scale", scale);
intent.putExtra("return-data", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, createTempCroppedImageFile());
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());

// Publish intent to crop picture.
activity.startActivityForResult(intent, activity.CROP_PHOTO_REQUEST_CODE);  

- Метод onActivityResult () -

// Photo crop activity.
if (requestCode == CROP_PHOTO_REQUEST_CODE) {
    if (resultCode == RESULT_OK) {
        Log.d(TAG, "user cropped a photo");
        signupScreen.setImage(new PhotoTool(this).getTempCroppedImageFileLocation());
    } else
        Log.d(TAG, "user cancelled photo crop");
}

Если я откинусь из активности урожая, я успешно получу сообщение «Пользователь отменен фоторопый». Но если я обрезаю изображение, новое обрезанное изображение появится в целевом каталоге, но функция OnActivityResult () никогда не будет вызвана. Что дает?

Глядя на Logcat, я обнаружил, что каждый раз, когда я сохраняю обрезанное изображение, «Javabinder» жалуется «неудачная транзакция связующего». Я понимаю, что это каким -то образом связано с памятью, но обрезанный файл составляет всего 24 КБ размер.

Это было полезно?

Решение

Нашел проблему в этой проблеме. К сожалению, это ограничение Android.

Видеть Android Cropper не может выйти за рамки 256?

Я установил выход моего обрезанного изображения на 400x400. К сожалению, Cropper Android по умолчанию может сделать только 256x256. Это так расстраивает, особенно когда нет документации по ограничениям.

Другие советы

Вы звоните setResult(int) (ссылка на сайт) в намерении урожая?

ОБНОВИТЬ:\

Отправка result_cancelled по умолчанию. Он всегда будет отправлен обратно, если вы не реализуете несколько вещей.

В вашем урожайном намерении, когда вы закончите редактирование (т.е. пользователь нажимает на кнопку Done или что -то подобное), часть этого процесса будет вызоваться setResult(RESULT_OK).

пример:

public void doneBTNPressed( View view ) {
    if ( view.getId() == R.id.doneBTN ) {
        this.isCropped = true;
    }
}

@Override    
protected void onPause() {
        if ( this.isCropped ) {
            setResult(RESUL_OK);
        }
        super.onPause();
    }

Этот результат (result_ok, плюс другое целое число, которое вы указываете) передается обратно в вызывающую деятельность (при условии, что использовался startActivityForResult ()). Есть также несколько переопределения, в зависимости от ваших потребностей. В призванной (родительской) деятельности вам придется внедрить onActivityResultint,int,Intent) Чтобы получить результат от выходящей деятельности.

В приведенной выше ссылке есть раздел под названием «Начальные действия и получение результатов», в котором объясняются многочисленные способы извлечения информации из выходящего действия.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top