Android MediaStore图像捕获预览以错误的方向显示

时间:2016-06-22 02:51:43

标签: android mediastore android-image-capture

通过MediaStore.ACTION_IMAGE_CAPTURE意图捕获照片时,显示的预览方向错误。这只发生在少数设备上。附件是它的外观截图。照片是用前凸轮拍摄的。我们的应用程序已经处理了方向校正,因此当用户点击检查时,它处于正确的方向。问题实际上只是预览。

尝试使用 i.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);,但它不起作用。有什么方法可以解决这个问题吗?或者我是否必须实施自定义相机?

编辑:我想要的预览是在您拍摄照片之后以及选择/完成拍摄的照片之前显示的预览。在我们的场景中(如附带的屏幕截图所示, onActivityResult()尚未调用。点击检查按钮调用 onActivityResult()回调。

Taken with the front cam on portrait

1 个答案:

答案 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;
    }