Я прошел через множество ссылок и проверил различные коды для этого, но он еще не соответствует моим требованиям.Проблемы с обрезкой изображения (IDE: - Android Studio (Java))
Это мое требование;
- Я хочу выбрать изображение из памяти телефона или SD-карты (дать возможность пользователю выбрать каталог изображений) и обрезать его.
Проблема в нем, в леденец ОС, когда я выбираю изображение из галереи он не обеспечивает кадрирование вариант, следовательно, GetData возвращает нуль, но если выбрать изображение из фотографий он обрезает изображение и сохранить его, следовательно, GetData возвращает URI, но исходное изображение будет перезаписано этим обрезанным.
- В Jellybean ситуация обратная, если я выбираю изображение из галереи, все работает отлично, но из фотографий опция обрезки не приходит.
Ниже приведен фрагмент кода ..
public void selectImageFromGallery()
{
try
{
Globals g = (Globals) getApplication();
int iWidthDP = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, g.screenWidth, getResources().getDisplayMetrics());
int iHeightDP = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 0);
intent.putExtra("aspectY", 0);
intent.putExtra("outputX", iWidthDP);
intent.putExtra("outputY", iHeightDP);
intent.putExtra("return-data", true);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_FROM_GALLERY);
}
catch(Exception ex)
{
Toast toast = Toast.makeText(this, "exception occurred in selectImageFromGallery" +
ex.getMessage().toString(), Toast.LENGTH_SHORT);
toast.show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
try
{
if ((requestCode == PICK_FROM_GALLERY || requestCode == PICK_FROM_CAMERA)
&& resultCode == RESULT_OK && null != data)
{
if (resultCode == RESULT_OK)
{
Bitmap bitmap = null;
Uri selectedImage = null;
if(requestCode == PICK_FROM_GALLERY || requestCode == PICK_FROM_CAMERA) {
selectedImage = data.getData();
if(selectedImage == null)
selectedImage = (Uri)data.getExtras().get("data");
}
if (Build.VERSION.SDK_INT < 19)
{
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
bitmap = BitmapFactory.decodeFile(picturePath);
}
else
{
ParcelFileDescriptor parcelFileDescriptor;
try {
parcelFileDescriptor = getContentResolver().openFileDescriptor(selectedImage, "r");
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
bitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor);
parcelFileDescriptor.close();
} catch (FileNotFoundException ex) {
Toast toast = Toast.makeText(this, "exception occurred in onActivityResult" + ex.getMessage().toString(), Toast.LENGTH_SHORT);
toast.show();
} catch (Exception ex) {
Toast toast = Toast.makeText(this, "exception occurred in onActivityResult" + ex.getMessage().toString(), Toast.LENGTH_SHORT);
toast.show();
}
}
image.setScaleType(ImageView.ScaleType.FIT_XY);
image.setImageBitmap(bitmap);
}
}
}
catch(Exception ex)
{
Toast toast = Toast.makeText(this, "exception occurred in onActivityResult" + ex.getMessage().toString(), Toast.LENGTH_SHORT);
toast.show();
}
}
}
Заранее спасибо ..
Вы хотите обрезать изображение, когда вы выбираете изображение из галереи или камеры? – RushDroid
От обоих, но давайте теперь сосредоточимся на Галерее. – Gvs13
Я предлагаю вам использовать библиотеку для этого легко. – RushDroid