Android中的相机方向问题

我正在构建一个使用相机拍照的应用程序。 这是我的源代码来做到这一点:

        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卡上的真实图像

  • 采用横向模式拍摄,一切都很好。
  • 拍摄后的图像预览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度。

    希望它能帮助其他任何人解决这个问题。


    有两件事情需要:

  • 相机预览需要与您的旋转相同。 通过camera.setDisplayOrientation(result);设置它camera.setDisplayOrientation(result);

  • 将拍摄的照片保存为相机预览。 通过Camera.Parameters完成此Camera.Parameters

    int mRotation = getCameraDisplayOrientation();
    
    Camera.Parameters parameters = camera.getParameters();
    
    parameters.setRotation(mRotation); //set rotation to save the picture
    
    camera.setDisplayOrientation(result); //set the rotation for preview camera
    
    camera.setParameters(parameters);
    
  • 希望有所帮助。

    链接地址: http://www.djcxy.com/p/41835.html

    上一篇: Camera orientation issue in Android

    下一篇: Get focus on third party application and return