问题描述
|
我正在尝试拍摄图片,并使用以下代码将其存储到内部存储器中:
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意向的单一方向是横向。如果我以人像模式拍摄照片,则该照片将存储到旋转的“ takenPhoto”文件中。
该问题似乎仅出现在Samsung galaxy S设备(galaxy S和Nexus S)上,我尝试过的其他设备会根据图像拍摄期间的方向自动旋转。
我将非常感谢您对此问题的任何帮助。
解决方法
据我所知,这是因为Intent并未设置being1ѭ值。当事物通过普通的相机应用程序时,它的确设置了。
但是,在我的Nexus S上,该文件仍会获取正确的EXIF数据。因此,您可以获得以下方向:
ExifInterface exif = new ExifInterface(\"filepath\");
exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,ExifInterface.ORIENTATION_NORMAL);
然后您可以使用ContentResolver.update添加正确的ORIENTATION数据。您只需要将ExifInterface方向选项转换为旋转的度数即可。
您的另一个选择是创建自己的活动以操作相机硬件并记录文件。然后,您需要跟踪旋转并在保存捕获的图像时将值写入元数据。由于Camera应用程序是Android的一部分,因此您可以轻松进行复制和修改。
,我在包括Galaxy Ace在内的三星手机上也遇到过这个问题(我称拍照操作与您的操作完全不同)
我的猜测是这是操作系统/硬件级别的问题。您是否尝试过使用本机相机应用程序拍照,并设法在该应用程序中获得正确的方向?