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;
}
}