Android中的相机方向问题该如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (28)

我正在构建一个使用相机拍照的应用程序,这是我的源代码:

        File file = new File(Environment.getExternalStorageDirectory(),
            imageFileName);
    imageFilePath = file.getPath();
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    //Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
    startActivityForResult(intent, ACTIVITY_NATIVE_CAMERA_AQUIRE);

onActivityResult()方法上,我用BitmapFactory.decodeStream()来拾取图像。

当我在Nexus上运行我的应用程序时,它运行良好。但是当我在三星Galaxy S或HTC Inspire 4G上运行时,图像的方向不正确。

  • 以肖像模式拍摄,真实图像(保存在SD卡上)始终旋转90度。

拍摄后的图像预览--------- SD卡上的真实图像

  • 采用横向模式拍摄,一切都很好。

拍摄后的图像预览--------- SD卡上的真实图像

提问于
用户回答回答于

这里有很多类似的话题和问题。既然你没有写自己的相机,我认为它归结为:

有些设备会在保存图像之前旋转图像,而另一些设备只是在照片的exif数据中添加方向标签。

我建议检查照片的exif数据并特别寻找 :

ExifInterface exif = new ExifInterface(SourceFileName);     //Since API Level 5
String exifOrientation = exif.getAttribute(ExifInterface.TAG_ORIENTATION);
用户回答回答于

我刚刚遇到同样的问题,并用它来纠正方向:

public void fixOrientation() {
    if (mBitmap.getWidth() > mBitmap.getHeight()) {
        Matrix matrix = new Matrix();
        matrix.postRotate(90);
        mBitmap = Bitmap.createBitmap(mBitmap , 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, true);
    }
}

如果位图的宽度大于高度,则返回的图像处于横向,所以我将它旋转90度。

扫码关注云+社区