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

Ale*_*hni 7 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);
Run Code Online (Sandbox Code Playgroud)

问题是在Nexus S和Galaxy S设备默认情况下,ACTION_IMAGE_CAPTURE意图的单一方向是横向.如果我以纵向模式拍摄照片,则该照片将被存储到旋转的"拍摄照片"文件中.

这个问题似乎只出现在三星Galaxy S设备(Galaxy S和Nexus S)上,我试过的其他设备根据图像拍摄时的方向进行自动旋转.

我将非常感谢有关该问题的任何帮助.

abs*_*ent 3

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

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

ExifInterface exif = new ExifInterface("filepath");
exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                     ExifInterface.ORIENTATION_NORMAL);
Run Code Online (Sandbox Code Playgroud)

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

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