Android, по умолчанию, на самом деле имеет все перечисленные вами.
Чтобы выбрать изображение из галереи
Intent pickPhoto = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(pickPhoto, FROM_GALLERY);
Для захвата изображения с камеры
Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePicture, FROM_CAMERA);
Чтобы получать результаты вышеуказанных намерений и сделать кадрирование
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case FROM_GALLERY:
case FROM_CAMERA: {
if (resultCode == Activity.RESULT_OK) {
Uri selectedImage = data.getData();
Intent cropIntent = new Intent("com.android.camera.action.CROP");
cropIntent.setDataAndType(selectedImage, "image/*");
cropIntent.putExtra("crop", "true");
cropIntent.putExtra("aspectX", 1);
cropIntent.putExtra("aspectY", 1);
cropIntent.putExtra("outputX", MAX_WIDTH);
cropIntent.putExtra("outputY", MAX_HEIGHT);
cropIntent.putExtra("return-data", true);
startActivityForResult(cropIntent, PICTURE_CROP);
}
break;
}
case PICTURE_CROP: {
if (resultCode == Activity.RESULT_OK) {
final Bundle extras = data.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
// Hurray! You now have the photo as a Bitmap
}
}
break;
}
}
}
Update:
Согласно этому post вы не должны использовать com.android.camera.action.CROP
, так как это не существует во всех устройствах. В этой должности он также перечислил альтернативные варианты, которые я перечислю здесь:
- https://github.com/lvillani/android-cropimage
- https://github.com/biokys/cropimage
, что вы пробовали до сих пор? – MAC
Что вы имеете в виду? – Val
Вы еще ничего пробовали? и у вас возникли проблемы? – MAC