Мне удалось либо сделать снимок с помощью камеры, либо выбрать из галереи, а затем передать путь к другому действию. В другом действии я показываю изображение в ImageView.Как обрезать изображение с пути?
private void initData() {
photoPath = getIntent().getStringExtra("path");
Bitmap photo = BitmapFactory.decodeFile(photoPath);
rotatePhoto(photo);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btnCrop:
cropPhoto(photoPath);
break;
case R.id.btnText:
break;
case R.id.btnFrame:
break;
}
}
private void rotatePhoto(Bitmap bitmap) {
ExifInterface exif = null;
try {
exif = new ExifInterface(photoPath);
} catch (IOException e) {
Log.d(TAG, "Rotate photo: " + e.getMessage());
}
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
Matrix matrix = new Matrix();
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
matrix.setRotate(90);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
matrix.setRotate(180);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
matrix.setRotate(270);
break;
}
Bitmap rotatedPhoto = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
ivEdit.setImageBitmap(rotatedPhoto);
}
private void cropPhoto(String path) {
try {
cropImageUri = Uri.parse(path);
Intent cropIntent = new Intent("com.android.camera.action.CROP");
cropIntent.setDataAndType(cropImageUri, "image/*");
cropIntent.putExtra("crop", "true");
cropIntent.putExtra("aspectX", 1);
cropIntent.putExtra("aspectY", 1);
cropIntent.putExtra("scale", true);
cropIntent.putExtra("outputX", 500);
cropIntent.putExtra("outputY", 500);
cropIntent.putExtra("return-data", false);
startActivityForResult(cropIntent, REQUEST_CROP);
} catch (ActivityNotFoundException e) {
String errorMessage = "Whoops - your device doesn't support the crop action!";
Toast toast = Toast
.makeText(this, errorMessage, Toast.LENGTH_SHORT);
toast.show();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CROP) {
if (data != null) {
Bundle extras = data.getExtras();
Bitmap bb = extras.getParcelable("data");
ivEdit.setImageBitmap(bb);
}
}
}
Как я могу обрезать это изображение, а затем обновить ImageView? Я пробовал обрезать другие изображения, но они должны поступать из галереи. Возможно ли это? Если нет, предложите способ. То, как я пытаюсь это сделать, я получаю «Невозможно загрузить фотографию».
Я не понимаю, как это помогает мне. Мне нужно обрезать изображение, которое я уже показал в изображении, а затем обновить изображение. – Esteban
Почему бы вам не помочь? Вы должны использовать свой путь. Поэтому измените 'String filePath = getRealPathFromURI (imageUri);' на 'String filePath = photePath;'. Код просто делает больше, чем вам нужно, и, возможно, это немного запутанно. Но он создает измененный битмап, который вы можете назначить своему ImageView. Так лучше сказать спасибо. – greenapps
Хорошо, попробуй. Может быть, я слишком отреагировал, так как это сбивает с толку. Благодаря! – Esteban