Android Camera2的使用记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chezi008/article/details/80234689

Android Camera2的使用

一、使用前准备

  1. Api 版本控制:API>=21
  2. 权限检查:
    <!--相机权限-->
    <uses-permission android:name="android.permission.CAMERA"></uses-permission>

二、开始使用

摄像头变量

  1. CameraCharacteristics.LENS_FACING_FRONT:前置
  2. CameraCharacteristics.LENS_FACING_BACK:后置
  3. CameraCharacteristics.LENS_FACING_EXTERNAL:额外(双摄像头)

三、功能使用

首先得判断一下设备是否支持camera2功能

传送门
API 21要求实现Camera2 API,虽然厂商实现了这些API,但实际上可设置的参数比Camera少,甚至性能都比Camera差。Camera2留给厂商一条退路,可以指明设备对Camera2的支持程度,结果好多不乏主力设备机型,都是最低支持程度。

通过

CameraCharacteristics characteristics
                        = manager.getCameraCharacteristics(cameraId);
characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);

可以得到对Camera2的支持程度,具体描述在INFO_SUPPORTED_HARDWARE_LEVEL中有介绍。得到的int值在CameraMetadata中定义,其中FULL值为1,LEGACY值为2,LIMITED值为0,其支持程度为FULL > LIMITED > LEGACY。

手动对焦:

  1. 先关闭自动焦距模式 mPreviewBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_OFF);
    mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_OFF);

  2. 再设置上焦距值 mPreviewBuilder.set(CaptureRequest.LENS_FOCUS_DISTANCE, 焦距值)

关于预览画面变形问题(仿微信,全屏拍摄)

这里有几个尺寸需要分清楚
1. surfaceView的尺寸,也就是显示画面的尺寸。
2. 摄像头支持的尺寸
3. surfaveView buffer的尺寸,这个尺寸往往是最容易忽略设置的。我们可以在打开摄像头的回掉里面去设置buffer尺寸的大小。

// We configure the size of default buffer to be the size of camera preview we want.
                texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());

以上几个尺寸不一致都会导致变形的问题

使用过程中遇到的问题

录制的方向问题

并不是许多demo里面所说的使用

getWindowManager().getDefaultDisplay().getRotation();

去判断,这个角度只有用户开启自动旋转的时候才有效果。但是像系统相机,还是微信的相机在关闭自动旋转的情况下,录制也会屏幕旋转的,而是靠重力感应去判断屏幕的旋转方向。最明显的效果是微信的相机icon会根据旋转的角度改变。

四、参考引用

[1]: 极客学院android.hardware.camera2 使用指南
[2]: Android平台Camera开发实践指南
[3]: Android 拍摄(横\竖屏)

猜你喜欢

转载自blog.csdn.net/chezi008/article/details/80234689