Как обрезать изображение, URI которого известен в Android? - PullRequest
4 голосов
/ 16 февраля 2011

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

Теперь необходимо обрезать выбранную часть изображения, а затем показать и сохранить это обрезанное изображение.

РЕДАКТИРОВАТЬ:

Я использовал Intent, чтобы открыть изображение и обрезатьон использует intent.putExtra ("crop", "true");

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

Может кто-нибудь предложить, как я могу открыть определенный URI через намерение передачи для открытия изображения.Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 16 февраля 2011

Что касается последней части вашего вопроса, если вы используете самую последнюю версию Gingerbread (2.3.3, API level 10), вы можете использовать BitmapRegionDecoder для обрезки изображения.

Это полезно, потому что, пока этот API не существовал, вам пришлось загружать все изображение в память, прежде чем вы могли обрезать. На 5-мегапиксельных и 8-мегапиксельных камерах это обычно невозможно без подвыборки (т. Е. Обрезанное изображение теряет много разрешения).

2 голосов
/ 21 февраля 2011

ОБНОВЛЕНИЕ: Изменен мой ответ после того, как вопрос был отредактирован и более точно описан.

Проблема, с которой вы столкнулись, имеет давнюю историю, также на SO:

невозможно найти ком.android.camera.CropImage активность в android

В одном ответе описано, что вам нужно.Обратите внимание, что вы используете намерение, которое не является частью официального SDK, и вы можете столкнуться с различными видами проблем.Проблема, с которой я столкнулся, заключалась в использовании кадрирования сразу после того, как изображение было снято камерой.Кроме того, он не совместим с различными версиями Android, поэтому, если вы работаете на 1.5, возможно, он не будет работать на 2.3.Другие полезные ссылки:

http://groups.google.com/group/android-developers/browse_thread/thread/2dd647523926192c/569f36b5b28f2661?lnk=gst&q=Crop+image+intent#569f36b5b28f2661

http://groups.google.com/group/android-developers/browse_thread/thread/2dd647523926192c/dcbe5aef29eddad6?lnk=gst&q=Crop+image+intent#dcbe5aef29eddad6

http://groups.google.com/group/android-developers/browse_thread/thread/d7b6a133c164aa17/184bf3b85da2ce58?lnk=gst&q=Crop+image+intent#184bf3b85da2ce58

1 голос
/ 17 февраля 2011

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

Суть в том, что вы не хотите использовать ImageView, поскольку он в основном предназначен для отображения статического изображения с различными свойствами масштабирования. Лучше использовать пользовательский вид с переопределенным методом draw ().

0 голосов
/ 25 июня 2014

Для обрезки изображения

private void cropImage() {
    // Use existing crop activity.
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(capturedImageUri, IMAGE_UNSPECIFIED);

    // Specify image size
    intent.putExtra("outputX", IMAGE_DIMENSION);
    intent.putExtra("outputY", IMAGE_DIMENSION);

    // Specify aspect ratio, 1:1
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    intent.putExtra("scale", true);
    intent.putExtra("return-data", true);
    // REQUEST_CODE_CROP_PHOTO is an integer tag you defined to
    // identify the activity in onActivityResult() when it returns
    startActivityForResult(intent, REQ_CODE_CROP_PHOTO);
}
...