Android Camera2 自定义相机

本文详细介绍了在Android API21中如何使用Camera2类构建自定义相机应用。主要内容包括通过TextureView显示预览,生命周期绑定以确保资源正确释放,以及核心代码示例,如使用CameraManager打开Camera,创建CameraCaptureSession管理和处理预览及拍照请求。此外,还提到了拍照时ImageReader的使用。
摘要由CSDN通过智能技术生成

Android Camera2 自定义相机

在Android API21中Google发布了Camera2类来取代Camera类,两者的变动也是比较大的,所以需要重新学习一下Camera2的用法,写下这篇博客当做笔记了。

开头是一些网上烂大街的东西,不过作为基础的知识还是要记录一下,官网地址点这里

Android Camera2 流程示意图

Google采用了pipeline(管道)的概念,将Camera Device相机设备和Android Device安卓设备连接起来, Android Device通过管道发送CaptureRequest拍照请求给Camera Device,Camera Device通过管道返回CameraMetadata数据给Android Device,这一切建立在一个叫作CameraCaptureSession的会话中。

Camera2中主要类

Camera2自定义流程图

来看一下具体的实现

TextureView

使用TextureView作为预览的展示View,之前一般使用的都是SurfaceView来实现的。


首先,TextureView在Andriod4.0之后的API中才能使用。其次SurfaceView可以通过SurfaceHolder.addCallback方法在子线程中更新UI,TextureView则可以通TextureView.setSurfaceTextureListener在子线程中更新UI,两者更新画面的方式也有些不同,由于SurfaceView的双缓冲功能,可以是画面更加流畅的运行,但是由于其holder的存在导致画面更新会存在间隔。并且,由于holder的存在,SurfaceView也不能进行像View一样的setAlpha和setRotation方法,但是对于一些类似于坦克大战等需要不断告诉更新画布的游戏来说,SurfaceView绝对是极好的选择。但是比如视频播放器或相机应用的开发,TextureView则更加适合。(摘抄自http://blog.csdn.net/lrh_12580/article/details/51308139)

private final TextureView.SurfaceTextureListener mSurfaceTextureListener
            = new TextureView.SurfaceTextureListener() {

        @Override
        public void onSurfaceTextureAvailable(SurfaceTexture texture, int width, int height) {
            openCamera(width, height); //打开Camera
        }

        @Override
        public void onSurfaceTextureSizeChanged(SurfaceTexture texture, int width, int 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
camera2是Android系统中的相机API,它允许我们以更精细和灵活的方式控制设备上的相机功能。相较于旧版的camera API,camera2提供了更多的配置选项和更高的性能。 使用camera2 API可以实现自定义相机功能,具体步骤如下: 1. 获取相机管理器:通过CameraManager类的实例,我们可以获取设备上的所有可用相机。可以使用getCameraIdList()方法获取可用相机的ID列表。 2. 打开相机:通过openCamera()方法打开指定ID的相机设备。这个方法需要传入一个CameraDevice.StateCallback对象,以接收相机打开或关闭的回调通知。 3. 创建相机预览会话:通过CameraDevice对象的createCaptureSession()方法,可以创建一个用于预览相机图像的会话。需要传入一个Surface对象来接收相机图像的显示。 4. 配置相机参数:可以使用CaptureRequest.Builder对象设置相机参数,如曝光时间、ISO感光度、对焦模式等。通过调用set()方法来设置参数值。 5. 拍摄照片:通过调用CameraCaptureSession的capture()方法可以拍摄照片。需要传入一个CaptureRequest对象,该对象包含了拍摄照片时的参数配置。 6. 相机释放:当不再需要相机时,需要通过调用CameraDevice的close()方法来释放相机资源。 使用camera2 API可以实现更多高级的相机功能,如手动对焦、手动曝光、RAW格式拍摄等。但由于其相对复杂的使用方式,需要更多的开发技巧和对相机相关知识的理解。在开发自定义相机应用时,可以参考Android官方文档和相关示例代码,更好地利用camera2 API的强大功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值