我正在尝试使用以下代码拍摄照片并将其存储到内部存储中:
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)上,我尝试的其他设备根据图像拍摄时的方向进行自动旋转。
我非常感谢你在这个问题上的任何帮助。
答案 0 :(得分:3)
据我所知,这种情况正在发生,因为此Intent未设置MediaStore.Images.ImageColumns.ORIENTATION
值。当事情通过普通的相机应用程序时,它确实会被设置。
但是,在我的Nexus S上,该文件仍然可以获得正确的EXIF数据。所以你可以得到这样的方向:
ExifInterface exif = new ExifInterface("filepath");
exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
然后您可以使用ContentResolver.update添加正确的ORIENTATION数据。您只需将ExifInterface方向选项转换为旋转角度。
您的另一个选择是创建自己的活动来操作相机硬件并记录文件。然后你要跟踪旋转和保存捕获的图像时将值写入元数据。由于相机应用程序是Android的一部分,您可以复制&修改它没有太多的痛苦。
答案 1 :(得分:0)
我在三星手机上也遇到了这个问题,包括Galaxy Ace,(我称相机动作与你的完全不同)
我的猜测是这是操作系统/硬件级别的问题。您是否尝试使用本机相机应用程序拍摄照片,并对其进行管理以在该应用程序中获得正确的方向?