Android.Camera2相机超详细讲解
来源:互联网 发布:mac os.ios镜像文件 编辑:程序博客网 时间:2024/06/06 00:14
Android.Camera2相机超详细讲解
在API21中Google就发布了Camera2类来取代Camera类,那么这个Camera2类到底改变了那些地方呢,我们来看官方的说法:
Camera2 API
- Supports 30fps full resolution with burst mode
支持30fps的全高清连拍 - Supports change on manual camera settings between frame capture
支持帧之间的手动设置 - Supports RAW image capture
支持RAW格式的图片拍摄 - Supports Zero Shutter Lag & Movie Snapshot
支持快门0延迟以及电影速拍 - Supports setting other manual camera device controls including level of Noise Cancelling
支持相机其他方面的手动控制包括噪音消除的级别
还有部分新功能没有列出
查看了一下API,发现Camera2相对于Camera类架构都改变了,所以代码肯定是不通用的了,相比之前的代码应该算是比较难了一点了。
先来看看camera2包架构示意图:
Google采用了pipeline(管道)的概念,将Camera Device相机设备和Android Device安卓设备连接起来, Android Device通过管道发送CaptureRequest拍照请求给Camera Device,Camera Device通过管道返回CameraMetadata数据给Android Device,这一切建立在一个叫作CameraCaptureSession的会话中。
下面是camera2包中的主要类:
其中CameraManager是所有相机设备(CameraDevice)的管理者,而每个CameraDevice自己会负责建立CameraCaptureSession以及建立CaptureRequest。CameraCharacteristics是CameraDevice的属性描述类,在CameraCharacteristics中可以进行相机设备功能的详细设定(当然了,首先你得确定你的相机设备支持这些功能才行)。
类图中有着三个重要的callback,其中CameraCaptureSession.CaptureCallback将处理预览和拍照图片的工作,需要重点对待。
这些类是如何相互配合的?下面是简单的流程图:
- 可以看出调用openCamera方法后会回调CameraDevice.StateCallback这个方法,在该方法里重写onOpened函数。
- 在onOpened方法中调用createCaptureSession,该方法又回调CameraCaptureSession.StateCallback方法。
- 在CameraCaptureSession.StateCallback中重写onConfigured方法,设置setRepeatingRequest方法(也就是开启预览了)。
- setRepeatingRequest又会回调
CameraCaptureSession.CaptureCallback方法。 - 重写CameraCaptureSession.CaptureCallback中的
onCaptureCompleted方法,result就是未经过处理的元数据了。
顺便提一下onCaptureProgressed方法很明显是在Capture过程中的,也就是在onCaptureCompleted之前,所以,在这之前相对图像干什么就看你的了,像美颜等操作就可以在这个方法中实现了。
可以看出Camera2相机使用的逻辑还是比较简单的,其实就是3个Callback函数的回调,先说一下:setRepeatingRequest和capture方法其实都是向相机设备发送获取图像的请求,但是capture就获取那么一次,而setRepeatingRequest就是不停的获取图像数据,所以呢,使用capture就想拍照一样,图像就停在那里了,但是setRepeatingRequest一直在发送和获取,所以需要连拍的时候就调用它,然后在onCaptureCompleted中保存图像就行了。(注意了,图像的预览也是用的setRepeatingRequest,只是你不处理数据就行了)
下面贴出代码,我用的TextureView来显示图像:
首先权限不能忘: <uses-permission android:name="android.permission.CAMERA"/>
布局:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
如需按键,就加一个Button,写上
- 1
- 2
- 3
- 1
- 2
- 3
其实过程还是挺简单的,主要是逻辑比较简单,就是不停的Callback,然后在onCaptureCompleted中处理数据就行了。
- Android.Camera2相机超详细讲解
- Android.Camera2相机超详细讲解
- Android.Camera2相机超详细讲解
- Android自定义相机超详细讲解
- Android自定义相机超详细讲解
- Android自定义相机超详细讲解
- Android Camera2相机封装讲解(含Demo)
- Android Camera2 自定义相机
- android 自定义相机Camera2
- Camera2 Android相机Demo
- Android自定义相机详细讲解
- Android 动画超详细讲解
- Android camera2 判断相机功能是否可控
- Android 用 camera2 API 自定义相机
- Android使用Camera2打造自定义相机
- 指针超详细 讲解
- 使用android.hardware.camera2打造新的自定义相机
- HMM超详细讲解+代码
- 呵呵原来类也可以强制转换为接口类型的啊呵呵
- CODING 到10点多,嘿!UL,LI,position们
- 2.1类的引入(JAVA)
- IO流
- Atitit 教育与培训学校 的计划策划 v4 qc18
- Android.Camera2相机超详细讲解
- 01_Android源码下载方法
- redis配置详解
- Android Recyclerview嵌套 列表里面套列表
- Java基础
- sql查询语句的执行顺序
- 常见OOM异常
- 进程
- 工具及软件