在Android中显示相机方向无法改变?

时间:2015-11-09 04:21:15

标签: android camera android-camera

我知道已经存在这样的问题,但没有人解决它。我拿了一些帮助,找出了相对于显示器更换相机所需的基本代码。

   cameraInfo=new Camera.CameraInfo();
                camera.getCameraInfo(camId,cameraInfo);
                int angle=0;
                int rotation = getActivity().getWindowManager().getDefaultDisplay()
                        .getRotation();
                switch(rotation)
                {
                    case Surface.ROTATION_0:
                        parameters.setPreviewSize(s.width, s.height);
                        Log.i(TAGR, "THE ROATTION IS 0");
                        camera.setDisplayOrientation(90);
                        break;
                    case Surface.ROTATION_90:
                        parameters.setPreviewSize(s.width, s.height);
                        Log.i(TAGR, "THE ROATTION IS 90");
                        camera.setDisplayOrientation(0);

                        break;
                    case Surface.ROTATION_180:
                        parameters.setPreviewSize(s.width, s.height);
                        Log.i(TAGR, "THE ROATTION IS 180");
                        camera.setDisplayOrientation(0);

                        break;
                    case Surface.ROTATION_270:
                        parameters.setPreviewSize(s.width, s.height);
                        Log.i(TAGR, "THE ROATTION IS 270");
                        camera.setDisplayOrientation(180);
                        break;
                    default:
                        camera.setDisplayOrientation(0);
                        break;
                }

            }

但是,我无法获得有关设备旋转的正确显示预览。我尝试了几种不同的角度组合。但是,没有人给我正确的输出。我正在附上我的预览图像。请解释问题的解决方案。此外,我想知道我的设备的哪个位置对应于角度0,90,180和270.换句话说,0对应于纵向还是横向?

图片: 在这一个景观倒置。我在ROTATION_180时尝试将旋转设置为180。这样做并没有成功,因为另一个方向(在风景中)变得倒置The landscape in this orientation is inverted

颠倒的方向没有任何作用。所需的结果是按下单击按钮并进行正确的预览。我不知道为什么这不起作用。我在每个轮换中尝试了几个值,但没有一个解决了这个问题。

This is the upside down orientation of my phone

我是初学者,所以请详细解释。感谢。

2 个答案:

答案 0 :(得分:1)

您应该检查设备的CameraInfo.orientation。请注意,此属性通过Display.getRotation()为设备提供自然显示方向的旋转。

如果您的自定义相机应用使用android.hardware.camera2 API,则会自动进行此补偿。

如果您的自定义相机活动没有锁定屏幕方向,那么它将受到"反向风景"故障,需要 special treatment ,其中涉及 OrientationEventListener

答案 1 :(得分:0)

您可以在预览之前像这样旋转图像:

  public static Bitmap rotateImage(Bitmap bitmapSrc) {
    Matrix matrix = new Matrix();
    matrix.postRotate(previewRotation);
    return Bitmap.createBitmap(bitmapSrc, 0, 0,
            bitmapSrc.getWidth(), bitmapSrc.getHeight(), matrix, true);
}

“previewRotation”可以从:

获得
    private static void setCameraDisplayOrientation(Context mContext, android.hardware.Camera.CameraInfo info) {
    int rotation = ((CameraActivity) mContext).getWindowManager().getDefaultDisplay()
            .getRotation();
    int degrees = 0;
    switch (rotation) {
        case Surface.ROTATION_0:
            degrees = 0;
            break;
        case Surface.ROTATION_90:
            degrees = 90;
            break;
        case Surface.ROTATION_180:
            degrees = 180;
            break;
        case Surface.ROTATION_270:
            degrees = 270;
            break;
    }

    if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
        previewRotation = (info.orientation + degrees) % 360;
        previewRotation = (360 - previewRotation) % 360;  // compensate the mirror
    } else {  // back-facing
        previewRotation = (info.orientation - degrees + 360) % 360;
    }
    mCameraInstance.setDisplayOrientation(previewRotation);
}