Android Camera2 开发实践指南

本文介绍了Android Camera2 API的使用,包括CameraManager、CameraCharacteristics、CameraDevice和CameraCaptureSession等关键类的作用。详细讲解了开发相机应用的流程,如权限请求、配置相机参数、设置自动曝光、自动对焦和ISO等。并提到了SurfaceView和TextureView在显示预览图像上的区别。通过示例展示了如何结合TextureView实现相机预览功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

我们知道 Android 中相机开发是有两套 API 可以使用的,一个是 Camera,这个适用于 Android 5.0 以下,另外一个是 Camera2,这个适用于 Android 5.0 以上。但是这仅仅是系统的建议,其实开发中由于国内厂商对 Camera2 的支持程度各不相同,即便是 5.0 以上的手机,也可能对 Camera2 支持非常差的情况,我们可能还得降级使用 Camera 来开发。

 

使用 Camera2 开发会涉及到一些系统方法的调用,我们需要大概了解一下他们的作用。

1.相机的管理主要由以下两个类提供:

CameraManager:相机管理类,可以获取相机个数,以及打开或关闭相机等操作。

CameraCharacteristics:获取相机的配置参数,比如获取相机支持的拍摄分辨率大小、ISO范围、曝光时间等,系统提供了大概78个配置选项。

2.相机的预览和拍摄主要由下面的类管理:

CameraDevice:这个相当于是打开相机后当前摄像头的表示,相机开发后会传入一个CameraDevice,我们可以使用此类来创建与相机的连接。

CameraCaputreSession:由CameraDevice配置好后产生的session,用于处理相机预览或者是拍照等处理,就相当于是已经建立连接了,然后现在通过这个CameraCaptureSession处理与相机进行对话。

CaptureRequest:控制本次获取图像的配置,比如配置图片的ISO,对焦方式和曝光时间等。

CaptureResult:描述拍照完成后的结果。

ImageReader:可以用这个类来做简单的捕获图像处理。

3.展示预览图像可以使用 SurfaceView 或 TextureView:

SurfaceView:界面渲染可以放在单独线程,自身不能支持使用动画。

TextureView:只能在拥有硬件加速层层的Window绘制,性能不如SurfaceView,并且可能丢帧,但是可以做一些动画效果。

两者详细差别分析可以参考:https://groups.google.com/a/chromium.org/forum/#!topic/graphics-dev/Z0yE-PWQXc4

 

Camera2 开发的整个流程就上面介绍的那样:

  1. 先请求相机权限
  2. 使用 CameraManager找到你想要的摄像头,前置或是后置。
  3. 通过 CameraCharacteristics 获取相机的配置信息,方便之后调整相机的各种参数。
  4. 通过 CameraManager 打开相机,得到当前的 CameraDevice。
  5. 通过 CameraDevice 创建本次会话,得到本次会话的 CameraCaptureSession。
  6. 使用 CaptureRequest 设置获取图片的参数信息,设置到 CameraCaptureSession 中。
  7. 在 ImageReader 或 CaptureResult 处理得到的图片。
  8. 关闭相机(不关闭有可能会导致相机资源占用,导致别的相机无法正常打开)

 

开发之前先来了解一些相机的配置介绍:

AE:Automatic Exposure(自动曝光)。

AF:Auto Focus(自动对焦)。

ISO:International Oriza

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值