android - Nexus S 和三星 Galaxy S I9000 上的 ACTION_IMAGE_CAPTURE 方向问题

标签 android android-intent galaxy nexus-s

我正在尝试使用以下代码拍摄照片并将其存储到内部存储器中:

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
takenPhoto = new File(uploadsFolder, getNewPicFileName());
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(takenPhoto));
startActivityForResult(intent, SHOOT_MEDIA_REQUEST_CODE);

问题在于,在 Nexus S 和 Galaxy S 设备上,默认情况下 ACTION_IMAGE_CAPTURE Intent 的单一方向是横向。如果我以纵向模式拍摄照片,则该照片会旋转存储到“takenPhoto”文件中。

这个问题似乎只出现在 Samsung Galaxy S 设备(Galaxy S 和 Nexus S)上,我试过的另一种设备在图像拍摄期间根据方向自动旋转。

我将非常感谢在这个问题上的任何帮助。

最佳答案

据我所知,发生这种情况是因为此 Intent 未设置 MediaStore.Images.ImageColumns.ORIENTATION 值。当事情通过普通相机应用程序时,它确实会被设置。

但是,在我的 Nexus S 上,该文件仍然获得正确的 EXIF 数据。所以你可以得到这样的方向:

ExifInterface exif = new ExifInterface("filepath");
exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                     ExifInterface.ORIENTATION_NORMAL);

然后你可以使用 ContentResolver.update添加正确的方向数据。您只需将 ExifInterface 方向选项转换为旋转的度数。

您的另一个选择是创建您自己的 Activity 来操作相机硬件并记录文件。然后,您会在保存捕获的图像时跟踪旋转并将值写入元数据。由于相机应用程序是 Android 的一部分,因此您可以毫不费力地复制和修改它。

关于android - Nexus S 和三星 Galaxy S I9000 上的 ACTION_IMAGE_CAPTURE 方向问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6143622/

相关文章:

android - 如何将图像旋转到从 Android 中的图库中选择的默认方向?

Android Placepicker 2019

android - getItem(position) 为不同的位置值返回相同的对象

android - Android 中的设备锁定

java - 此 Activity 已经有一个由 Android Studio 上的窗口装饰错误提供的操作栏

android - 此项目与您的设备 (Galaxy S3) 不兼容

java - Intent 未定义尝试了很多,但没有任何作用

安卓 Intent 数据库

android - 三星 Galaxy Note 10.1 GT-N8020 未出现在 Google Play 商店开发者控制台的设备列表中

android - 如何防止 Android 三星平板电脑上带有 Phonegap 的 Jquery Mobile 使用横向高度作为纵向高度?