画像をキャプチャ/チェイスする機能を実装しましたが、HTCではうまく機能しますが、Samsung Galaxy Note 4(Androidバージョンは5.1.1)では90度回転します。ここ は、コードの2つの変異体であるが、それでも回転:画像をimagelibraryから90度回転させた画像を表示
VARIANT 1:
public void captureImageCameraOrGallery() {
Intent galleryintent = new Intent(Intent.ACTION_GET_CONTENT, null);
galleryintent.setType("image/*");
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Intent chooser = new Intent(Intent.ACTION_CHOOSER);
chooser.putExtra(Intent.EXTRA_INTENT, galleryintent);
chooser.putExtra(Intent.EXTRA_TITLE, "Select from:");
Intent[] intentArray = { cameraIntent };
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
startActivityForResult(chooser, REQUEST_PIC);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_PIC && resultCode == RESULT_OK) {
Uri selectedImageUri = data.getData();
Bitmap bmp = null;
try {
if (selectedImageUri != null) {
bmp = getBitmapFromUri(selectedImageUri);
}
if (bmp == null) {
return;
}
ExifInterface ei = new ExifInterface(selectedImageUri.getPath());
int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
Log.e("Capture orientation: ", String.valueOf(orientation));
int rotateAngle = 0;
switch(orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
rotateAngle = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotateAngle = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotateAngle = 270;
break;
default:
break;
}
bmp = rotateImage(bmp, rotateAngle);
mUserImage.setImageBitmap(bmp);
} catch (IOException e) {
e.printStackTrace();
}
}
}
VARIANT 2:PhotoPicker:
をPhotoPicker libに コンパイル「me.iwf.photopicker使用0.9.5を@ aar '
public void captureImageCameraOrGallery() {
PhotoPicker.builder()
.setPhotoCount(1)
.setShowCamera(true)
.setShowGif(true)
.setPreviewEnabled(false)
.start(this, PhotoPicker.REQUEST_CODE);
}
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == PhotoPicker.REQUEST_CODE) {
if (data != null) {
ArrayList<String> photos = data.getStringArrayListExtra(PhotoPicker.KEY_SELECTED_PHOTOS);
Uri selectedImageUri = Uri.fromFile(new File(photos.get(0)));
Bitmap bmp = null;
try {
if (selectedImageUri != null) {
bmp = getBitmapFromUri(selectedImageUri);
}
if (bmp == null) {
return;
}
mUserImage.setImageBitmap(bmp);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
しかし、まだ回転しています。どんな助けもありがとう。
フラグ!hasRotationと少し混乱して申し訳ありません。 if(!hasRotation){// rotate} else {//ここでローテーションせずにイメージを読み込む? } – Svitlana
二重チェックがあります。まず、 'Cursor'を使用してコンテンツが回転しているかどうかをチェックし、フラグが設定されていればexif情報をチェックし、exif情報をチェックしてそこから回転データを取得します。 –
ありがとうございました!もう1つ質問がありますが、このように設定してください:intent.putExtra(MediaStore.EXTRA_OUTPUT、mCapturedImageURI);新しいIntentを呼び出してmCapturedImageURIをグローバル変数として使用する場合は? MediaStore.EXTRA_OUTPUTは大きな影響を及ぼしますか?または私はちょうどそれを得ることができるUri photoUri = data.getData(); onActivityResultに直接? – Svitlana