3

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

尝试使用 i.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);,但它不起作用。有没有办法解决这个问题?还是我必须实现自定义相机?

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

使用前置摄像头拍摄人像

4

1 回答 1

1

大多数手机相机都是横向的,这意味着如果您以纵向拍摄照片,生成的照片将旋转 90 度。在这种情况下,相机软件应使用查看照片的方向填充 EXIF 数据。 我从此处复制此答案

其他方式,您可以从相机获取旋转,然后执行任何您想要返回的图像。完整代码这里这个关于图像选择器的示例,但返回的处理图像的代码帮助我控制图像的旋转。

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;
    }
于 2016-06-22T03:35:23.103 回答