安卓

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

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意图的单一方向是横向。 如果我在肖像模式下拍摄照片,该照片将存储到旋转的“拍照”文件中。

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

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


从我所知道的情况来看,这是因为MediaStore.Images.ImageColumns.ORIENTATION值没有被这个Intent设置。 当事情通过普通的相机应用程序时,它确实会被设置。

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

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

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

您的其他选项是创建您自己的活动来操作相机硬件并记录文件。 然后,您将保存跟踪旋转并在保存捕获的图像时将值写入元数据。 由于相机应用程序是Android的一部分,因此您可以复制并修改它,而不会太痛苦。


我在包括Galaxy Ace在内的三星手机上也看到了这个问题,(我把相机动作称为与您不同的方法)

我的猜测是这是OS /硬件级别的问题。 您是否尝试过使用本机相机应用程序拍摄照片,并将其管理为在该应用程序中获得正确的方向?

链接地址: http://www.djcxy.com/p/7205.html

上一篇: android

下一篇: WebBrowser memory problem