Android Camera获取预览角度和数据角度获取

428 阅读1分钟

Android Camera开发中,适配屏幕旋转相机预览角度,以及相机原始回调数据保存图片旋转角度

public class CameraUtils {
    /**
     * 获取相机预览角度
     *
     * @param activity Activity
     * @param cameraID camera id
     * @return
     */
    public static int getDisplayOrientation(Activity activity, int cameraID) {
        int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
        Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
        Camera.getCameraInfo(cameraID, cameraInfo);
        int degree = 0;
        switch (rotation) {
            case Surface.ROTATION_0:
                degree = 0;
                break;
            case Surface.ROTATION_90:
                degree = 90;
                break;
            case Surface.ROTATION_180:
                degree = 180;
                break;
            case Surface.ROTATION_270:
                degree = 270;
                break;
        }

        int result;
        if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {//前摄
            result = (cameraInfo.orientation + degree) % 360;
            result = (360 - result) % 360;
        } else {
            result = (cameraInfo.orientation - degree + 360) % 360;
        }
        return result;
    }

    /**
     * 获取相机数据角度
     *
     * @param cameraID
     * @param activity
     * @return
     */
    public static int getCameraDataDegree(Activity activity, int cameraID) {
        int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
        Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
        Camera.getCameraInfo(cameraID, cameraInfo);
        int degree = 0;
        switch (rotation) {
            case Surface.ROTATION_0:
                degree = 0;
                break;
            case Surface.ROTATION_90:
                degree = 90;
                break;
            case Surface.ROTATION_180:
                degree = 180;
                break;
            case Surface.ROTATION_270:
                degree = 270;
                break;
        }

        int result;
        if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {//前摄
            result = (cameraInfo.orientation + degree) % 360;
        } else {
            result = (cameraInfo.orientation - degree + 360) % 360;
        }
        return result;
    }
}