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