Android camera2拍照旋转角度详解

您所在的位置:网站首页 摄像头手机调整方向 Android camera2拍照旋转角度详解

Android camera2拍照旋转角度详解

2024-07-03 17:07| 来源: 网络整理| 查看: 265

最近用Android camera2做自定义相机,基本的关于打开相机到预览的过程就不多叙述了

大家参看https://github.com/gengqifu/361Camera这个文章就可以知道

今天详细讲讲我开过程中遇到的旋转角度的问题

直接上代码

//初始化传感器定位 orientationEventListener = object : OrientationEventListener(mActivity) { override fun onOrientationChanged(orientation: Int) { Log.e("orientation", "orientation=$orientation") sensorOrientation = when (orientation) { -1 -> ORIENTATION_VERTICAL in 70..134 -> 90 in 135..224 -> 180 in 225..280 -> 270 else -> 0 //这里应该是281-69的范围 } } } orientationEventListener.enable()

这就是相机中  传感器定位的回调代码,是kotlin的代码。

代码以一个竖直平面,360度内旋转

正常应该是以45-134  135-224 225-314  315-45  这样4个区间

每90度一个区间平均分,但是实际开发中 我们判断为横屏拍照时,手机几乎得是旋转90度  才代表用户是横屏 

所以我加大了orientation为0的这样一个角度区间  减小了orientation为90和270的这样一个区间(判定为横屏拍照的区间)。

因此可以根据需求,调整你的区间  达到需求的目的。

上面是我们手机在竖直拍照时,水平拍照时怎么处理喃?

大家看到我的log日志中有个orientation为-1,这说明手机这时候已经水平放置了

这个时候你在水平面内  左右旋转这个orientation都不会改变  都是-1

因此我们在-1的时候,其实就默认是竖屏拍照就可以了,这是一个很容易忽略的点

val captureBuilder = cameraDevice?.createCaptureRequest( CameraDevice.TEMPLATE_STILL_CAPTURE )?.apply { if (::previewImageReaderSurface.isInitialized) { addTarget(previewImageReaderSurface) } set( CaptureRequest.JPEG_ORIENTATION, CameraUtil.getJpegOrientation( CameraConfig.getCurrentCameraCameraCharacteristics(), sensorOrientation ) ) if (lightIsOpened()) { set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON) set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH) } else { set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF) } set( CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH ) set( CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE ) //锁定焦点 set( CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START ) //手机水平拍摄的时候 设置成VERTICAL if (sensorOrientation == ORIENTATION_VERTICAL) { set(CaptureRequest.JPEG_ORIENTATION, 90) } }

这就是在拍照前,对相机的一些列设置  最后一个就是判断手机是水平时   将输出图片的orientation设置为90就可以了

我测试了手机自带的相机,水平拍摄时也是同样的处理方式

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3