通过MediaStore.ACTION_IMAGE_CAPTURE意图捕获照片时,显示的预览方向错误。这只发生在少数设备上。附件是它的外观截图。照片是用前凸轮拍摄的。我们的应用程序已经处理了方向校正,因此当用户点击检查时,它处于正确的方向。问题实际上只是预览。
尝试使用
i.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
,但它不起作用。有什么方法可以解决这个问题吗?或者我是否必须实施自定义相机?
编辑:我想要的预览是在您拍摄照片之后以及选择/完成拍摄的照片之前显示的预览。在我们的场景中(如附带的屏幕截图所示, onActivityResult()尚未调用。点击检查按钮调用 onActivityResult()回调。
答案 0 :(得分:1)
大多数手机摄像头都是风景照片,这意味着如果您拍摄照片,拍摄的照片将会旋转90度。在这种情况下,相机软件应使用应在其中查看照片的方向填充EXIF数据。 I copy this answer from here
其他方式,您可以从相机获得旋转,然后执行您想要返回的任何图像。 Full code here这个关于图像选择器的示例,但返回的代码处理图像帮助我控制图像的旋转。
private int getRotationFromCamera(Context context, Uri imageFile) {
int rotate = 0;
try {
context.getContentResolver().notifyChange(imageFile, null);
ExifInterface exif = new ExifInterface(imageFile.getPath());
int orientation = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_270:
rotate = 270;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotate = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_90:
rotate = 90;
break;
}
} catch (Exception e) {
e.printStackTrace();
}
return rotate;
}