Android Camera旋转角度总结

本文详细解析了Android相机的旋转角度问题,包括相机旋转角度、屏幕显示旋转角度及预览数据显示旋转角度的适配。针对后置和前置摄像头的不同情况,总结了预览数据显示旋转角度的规律,并给出了相应的适配代码示例。
摘要由CSDN通过智能技术生成

开发过Android自定义相机的朋友估计都被相机的各种乱七八糟的旋转角度适配坑过,本文将对Camera的各种角度进行解析。

一、适配目标

根据相机旋转角度以及屏幕显示旋转角度选择相机预览数据显示到View上的预览数据显示旋转角度,使眼睛直接看到的真实画面和手机屏幕中显示的画面效果相同。

  • **相机旋转角度:**相机成像相对于手机的旋转角度,若设备已经安装上了相机,那么该相机相对于设备的旋转角度是固定的。

    • Camera API获取方式
     Camera.CameraInfo info = new Camera.CameraInfo();
     Camera.getCameraInfo(cameraId, info);
     Log.i(TAG, "orientation: " + info.orientation);
    
    • Camera2 API获取方式
    CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
    sensorOrientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);
    Log.i(TAG, "orientation: " + sensorOrientation ;
    
  • 屏幕显示旋转角度: Activity#getWindowManager().getDefaultDisplay().getRotation()的值,可以是ROTATION_0ROTATION_90ROTATION_180ROTATION_270

  • 预览数据显示旋转角度:根据相机旋转角度屏幕显示旋转角度,我们即可计算预览数据显示旋转角度

二、发现规律

分别选择后置和前置摄像头,将手机以各个角度握持,获得相机旋转角度屏幕显示旋转角度预览数据如下,那么对于预览数据后前后置摄像头的镜像差别,我们可以总结出预览数据显示旋转角度

相机 相机旋转角度 屏幕显示旋转角度 预览帧数据 预览数据显示旋转角度
后置 90 Surface.ROTATION_0 (portrait) 后置_portrait 90
后置 90 Surface.ROTATION_90 (landscape) l后置_andscape 0
后置 90 Surface.ROTATION_180 (reverse-portrait) 后置_reverse-portrait 270
后置 90 Surface.ROTATION_270 (reverse-landscape) 后置_reverse-landscape 180
前置 270 Surface.ROTATION_0 (portrait) 前置_portrait 内部镜像)90
前置 270 Surface.ROTATION_90 (landscape) 前置_landscape 内部镜像)0
前置 270 Surface.ROTATION_180 (reverse-portrait) 前置_reverse-portrait 内部镜像)270
前置 270 Surface.ROTATION_270 (reverse-landscape) 前置_reverse-landscape 内部镜像)180
  • 内部镜像:
    对于后置摄像头,预览数据需要经过旋转后才能显示成正常效果,以竖屏情况为例:

    原始图 预览数据显示旋转角度
  • 8
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值