メディア ギャラリーから画像をトリミングしようとしています。画像にアクセスし、デフォルトのトリミング ツールを起動し、トリミングした画像の結果を保存することさえできます。
ただし、トリミングが成功した場合、私が使用しているインテントは結果を返しません。
私の主な方法:
// Crop photo intent.
Intent intent = new Intent("com.android.camera.action.CROP", null);
intent.setData(uri);
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("aspectX", aspectX);
intent.putExtra("aspectY", aspectY);
intent.putExtra("scale", scale);
intent.putExtra("return-data", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, createTempCroppedImageFile());
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
// Publish intent to crop picture.
activity.startActivityForResult(intent, activity.CROP_PHOTO_REQUEST_CODE);
– OnActivityResult() メソッド –
// Photo crop activity.
if (requestCode == CROP_PHOTO_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
Log.d(TAG, "user cropped a photo");
signupScreen.setImage(new PhotoTool(this).getTempCroppedImageFileLocation());
} else
Log.d(TAG, "user cancelled photo crop");
}
トリミング アクティビティをキャンセルすると、「ユーザーが写真のトリミングをキャンセルしました」というメッセージが正常に表示されます。しかし、画像をトリミングすると、新しいトリミングされた画像がターゲット ディレクトリに表示されますが、OnActivityResult() 関数が呼び出されることはありません。何を与える?
LogCat を見ると、トリミングされた画像を保存するたびに、「JavaBinder」が「Failed Binder Transaction」と文句を言うことがわかりました。これは何らかの形でメモリに関連していることは理解していますが、トリミングされたファイルのサイズはわずか 24KB です。