Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MediaStore图像捕获预览显示方向错误_Android_Mediastore_Android Image Capture - Fatal编程技术网

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

Android MediaStore图像捕获预览显示方向错误,android,mediastore,android-image-capture,Android,Mediastore,Android Image Capture,通过MediaStore.ACTION\u IMAGE\u拍摄意图拍摄照片时,显示的预览方向错误。这只发生在少数设备上。附件是它的外观截图。这张照片是用肖像上的前凸轮拍摄的。我们的应用程序已经处理了方向校正,所以当用户点击check时,它的方向是正确的。问题其实只是预览 试用 i.putExtra(MediaStore.EXTRA屏幕方向、ActivityInfo.SCREEN屏幕方向、纵向),但它不工作。有什么办法解决这个问题吗?或者我必须安装一个定制摄像头 编辑:我指的预览是在您拍摄照片之后

通过MediaStore.ACTION\u IMAGE\u拍摄意图拍摄照片时,显示的预览方向错误。这只发生在少数设备上。附件是它的外观截图。这张照片是用肖像上的前凸轮拍摄的。我们的应用程序已经处理了方向校正,所以当用户点击check时,它的方向是正确的。问题其实只是预览

试用
i.putExtra(MediaStore.EXTRA屏幕方向、ActivityInfo.SCREEN屏幕方向、纵向),但它不工作。有什么办法解决这个问题吗?或者我必须安装一个定制摄像头

编辑:我指的预览是在您拍摄照片之后,以及在您选择/最终确定您拍摄的照片之前显示的预览。在我们的场景中(如所附的屏幕截图所示),尚未调用onActivityResult()。点击复选按钮将调用onActivityResult()回调


大多数手机摄像头都是横向的,这意味着如果您以纵向方式拍摄照片,结果照片将旋转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;
    }

事实上,我们没有问题将生成的照片校正到正确的方向,因为在ActivityResult上,我们确定的旋转与您的答案中的方法类似。问题在于MediaStore.ACTION\u IMAGE\u捕获意图(无论它启动什么样的相机应用程序,我都不知道),它以错误的方式显示其预览。我指的预览是在您捕获后以及在您选择/最终确定已捕获的图像之前显示的预览。捕获后,您可以检查临时存储的图像。图像是否具有真实方向?是否找到解决方案?抱歉@Emmanuel,我无法找到。