0
私はカメラで写真を撮るか、ギャラリーから選択してパスを別のアクティビティに渡すことができました。他のアクティビティでは、イメージを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