2011-05-26 55 views
7

我想拍摄照片,并通过使用下面的代码存储到内置存储:ACTION_IMAGE_CAPTURE定位问题

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)上,我试过的另一个设备根据拍摄时的方向自动旋转。

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

回答

3

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

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

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

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

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

+0

你可以发布更新拍摄照片的exif元数据的示例代码吗? – Piotr 2014-09-09 00:42:22

0

我已经expereienced这个问题也对三星手机,包括银河王牌,(我所谓的相机操作与你完全不同的方法)

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