锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Android多媒体之---Camera实时视频采集预览时方向处理

时间:2023-09-23 22:07:02 6手动方向传感器多少

手机摄像头(Camera)图像数据来自摄像头硬件的图像传感器图像传感器固定在手机上后,会有默认的取景方向。这个取景方向正好是手机左侧横放时的方向,坐标原点在手机横放时的左上角。手机正常方向和图像传感器默认取景方向如下:a4c26d1e5885305701be709a3d33442f.png

Camera预览方向处理:

从上面的示意图可以看出,图像传感器的取景方向和手机的正常方向是90读角。当我们以正常的手机方向打开相机时,我们看到的预览图像应该是水平的。然而,当我们打开系统相机时,预览图像是正常的,即预览图像与手机方向一致。这是因为系统自带的相机在Android根据当前手机屏幕的方向,系统底部旋转图像传感器收集的数据,因此无论我们如何旋转手机屏幕,我们看到的相机预览图片总是正常的。对于自定义相机,如果图像传感器的图像没有旋转,则预览图像是水平的:

a4c26d1e5885305701be709a3d33442f.png

为解决自定义相机预览方向的异常情况,Android系统提供了一个API来手动设置Camera预览方向,即Camera.setDisplayOrientation(int

rotateDegree),默认情况下该方法的值为0,与图像传感器取景方向一致。旋转方法:

首先,通过Display的getOrientation()获取当前手机的方向,如Surface.ROTATION_0表示手机垂直屏幕的正常方向,Surface.ROTATION_90表示手机横向放置在右手边(顺时针判断)。Display

display =

getWindowManager().getDefaultDisplay()获得。其次,对于后置摄像头,它的预览成像是CameraInfo.orientatio-

phoneDegree,但是,由于该值可能为负,角度值不能为负,因此需要增加360校正;对于前置摄像头(front

camera)来说,它的预览图像在旋转之前是水平翻转的,也就是前置摄像头的预览成像是沿图像的中央垂直线翻转过来,就像用户照镜子一样的效果。因此,在得到前置摄像头的旋转角度后(rotation

= CameraInfo.orientatio degrees),还需要水平翻转(rotation =

360-rotation),即取rotation负数可以,但由于旋转角度不能为负数,加上360校正。其中,CameraInfo.orientatio图像传感器相对于手机垂直正常方向的角度值,手机方向相对于垂直正常方向沿顺时针旋转的方向值。此外,当我们得到前后摄像头的旋转方向时,我们需要超过360度,以防止旋转角度超过每周360度。

具体代码如下:

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章