【问题标题】:ACTION_IMAGE_CAPTURE orientation problem on Nexus S and Samsung Galaxy S I9000Nexus S 和三星 Galaxy S I9000 上的 ACTION_IMAGE_CAPTURE 方向问题
【发布时间】:2011-05-26 18:55:00
【问题描述】:

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

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”文件中。

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

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

【问题讨论】:

    标签: android android-intent galaxy nexus-s


    【解决方案1】:

    据我所知,这是因为 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 方向选项转换为旋转度数。

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

    【讨论】:

    • 您能否发布示例代码以更新所拍照片的 exif 元数据?
    【解决方案2】:

    我在三星手机(包括 Galaxy Ace)上也遇到过这个问题(我称相机动作与你的完全不同)

    我的猜测是这是操作系统/硬件级别的问题。您是否尝试过使用本机相机应用程序拍照,并管理它以在该应用程序中获得正确的方向?

    【讨论】:

      猜你喜欢
      • 2011-05-31
      • 2012-03-20
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 2012-06-12
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多