Android Multimedia框架总结(十五)Camera框架之Camera2补充
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52751055
前言:监于5.0之后Google用的是Camera2相关API取代之前的Camera,过时的Camera虽然精典,但不再进行介绍,可自行查阅相关资料。今天本文是在正式深入代码前对Camera2的一个补充。上篇中,最后用两种方式各自定义了一个相机的Sample。详细,可看《Android Multimedia框架总结(十四)Camera框架初识及自定义相机案例》,看下今天的Agenda:
- Camera2下各个Class介绍
- Camera2整体运作图
- Camera2类图(局部)
- Camera2中3个重要的Callback
- setRepeatingRequest和capture
5.0后用了全新的设计的Camera2下的API, 这些API不仅提供了Android系统的拍照功能,还能支持RAW照片输出,甚至允许程序调整相机的对焦模式,曝光模式,快门等。
Camera2下各个Class介绍
接下来接介绍Camera2下的各个类:
- CmaeraManager: 摄像头管理者,这是一个全新的系统管理者,专门用户检测系统摄像头,打开系统摄像头,除此之外,调用CameraManager的getCameraCharacteristics(String)方法即可获取指定摄像头的相关特性。
- CameraCharacteristics:摄像头特性。该对象通过CameraManager来获取,用于描述特定摄像头所支持的各种特性。
- CameraDevice:代表系统摄像头。该类的功能类似于早期的Camera类。
- CameraCaptureSession:这是一个与摄像头建立会话的类,当程序需要预览、拍照时,都需要先通过该类的实例创建Session。而且不管预览还是拍照,也都是由该对象的方法进行控制的,其中控制预览的方法为setRepeatingRequest();控制拍照的方法为capture()。
为了监听CameraCaptureSession的创建过程,以及监听CameraCaptureSession的拍照过程,Camera2 API为CameraCaptureSession提供了StateCallback、CaptureCallback等内部类。 - CameraRequest和CameraRequest.Builder:当程序调用setRepeatingRequest()方法进行预览时,或调用capture()方法进行拍照时,都需要传入CameraRequest参数。CameraRequest代表了一次捕获请求,用于描述捕获图片的各种参数设置,比如对焦模式、曝光模式……程序需要对照片所做的各种控制,都通过CameraRequest参数进行设置。可以理解一个请求参数一样,CameraRequest.Builder则负责生成CameraRequest对象。
本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52751055
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中可以进行相机设备功能的详细设定。
Camera2中3个重要的Callback
类图中有着三个重要的callback,其中CameraCaptureSession.CaptureCallback将处理预览和拍照图片的工作,需要重点对待。
以上流程总结为:
- 调用openCamera方法后会回调CameraDevice.StateCallback这个方法,在该方法里重写onOpened函数。在onOpened方法中调用createCaptureSession,该方法又回调CameraCaptureSession.StateCallback方法。
- 在CameraCaptureSession.StateCallback中重写onConfigured方法,设置setRepeatingRequest方法(也就是开启预览了)。
setRepeatingRequest又会回调
CameraCaptureSession.CaptureCallback方法。 - 重写CameraCaptureSession.CaptureCallback中的
onCaptureCompleted方法,result就是未经过处理的元数据了。 - 其中onCaptureProgressed方法是在Capture过程中的,像这类Progress,也就是在onCaptureCompleted之前,所以,在这之前相对图像干什么就看你的了,像美颜,美拍等操作就可以在这个方法中实现。
以上重点是3个Callback函数的回调
setRepeatingRequest和capture
接下来了解下:setRepeatingRequest和capture方法其实都是向相机设备发送获取图像的请求,但是capture就获取那么一次,而setRepeatingRequest就是不停的获取图像数据,所以呢,使用capture就想拍照一样,图像就停在那里,但是setRepeatingRequest一直在发送和获取,所以需要连拍的时候就调用它,然后在onCaptureCompleted中保存图像就行了。(注意了,图像的预览也是用的setRepeatingRequest,只是你不处理数据就行)
第一时间获得博客更新提醒,以及更多android干货,源码分析,欢迎关注我的微信公众号,扫一扫下方二维码或者长按识别二维码,即可关注。
如果你觉得好,随手点赞,也是对笔者的肯定,也可以分享此公众号给你更多的人,原创不易
Android Multimedia框架总结(十五)Camera框架之Camera2补充相关推荐
- PyTorch框架学习十五——可视化工具TensorBoard
PyTorch框架学习十五--可视化工具TensorBoard 一.TensorBoard简介 二.TensorBoard安装及测试 三.TensorBoard的使用 1.add_scalar() 2 ...
- Android 天气APP(十五)增加城市搜索、历史搜索记录
上一篇:Android 天气APP(十四)修复UI显示异常.优化业务代码逻辑.增加详情天气显示 添加城市 新版------------------- 一.推荐城市数据 二.推荐城市item布局和适配器 ...
- Android UI开发第二十五篇——分享一篇自定义的 Action Bar
Action Bar是android3.0以后才引入的,主要是替代3.0以前的menu和tittle bar.在3.0之前是不能使用Action Bar功能的.这里引入了自定义的Action Bar, ...
- python十大框架_python 十大web框架排名总结
0 引言 python在web开发方面有着广泛的应用.鉴于各种各样的框架,对于开发者来说如何选择将成为一个问题.为此,我特此对比较常见的几种框架从性能.使用感受以及应用情况进行一个粗略的分析. 1 D ...
- 从0到1手把手搭建spring cloud alibaba 微服务大型应用框架(十五) swagger篇 : gateway 集成swagger 与 knife4j实现在线api文档并嵌入到自己项目内
背景 我们日常开发中基本都是协同开发的,当然极个别的项目整体前后端都是一个人开发的,当多人协作时,尤其是前后端人员协同开发时 必然会面临着前端需要了解后端api接口的情况,两个选择,提前设计好文档,然 ...
- 【Android游戏开发二十五】在Android上的使用《贝赛尔曲线》!
首先对于<赛贝尔曲线>不是很了解的童鞋,请自觉白度百科.google等等... 为了方便偷懒的童鞋,这里给个<贝赛尔曲线>百科地址,以及一段话简述<贝赛尔曲线>: ...
- Android学习笔记(十五)——实战:强制下线
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 实现强制下线功能的思路也比较简单,只需要在界面上弹出一个对话框, 让用户无法进行任何其他操作, 必须要点击对话 ...
- skynet框架应用 (十二) snax框架
12 snax框架 snax 是一个方便 skynet 服务实现的简单框架.(简单是相对于 skynet 的 api 而言) 使用 snax 服务先要在 Config 中配置 snax 用于路 ...
- Android笔记(二十五) ListView的缓存机制与BaseAdapter
之前接触了ListView和Adapter,Adapter将数据源和View连接起来,实际应用中,我们要显示的数据往往有很多,而屏幕只有那么大,系统只能屏幕所能显示的内容,当我们滑动屏幕,会将旧的内容 ...
- Android开发笔记(十五)淡入淡出动画TransitionDrawable
说到淡入淡出动画,可能大家会想到补间动画里面的AlphaAnimation,不过这个深浅动画只能对透明度做渐变效果,也就是只能对一个图形做深浅的颜色变换.如果我们想要从A图片逐渐变为B图片,也就是要实 ...
最新文章
- 干掉ArrayList:HikariCP为什么自己造了一个FastList?
- MongoDB学习笔记【2】-- 试用
- 移动时捕捉不到基点_CAD入门学习攻略:CAD软件中对象捕捉功能使用技巧汇总
- python中mean的用法_Python statistics mean()用法及代码示例
- 3617. 子矩形计数
- 如何用手机打开dcm格式图片_实现原始Dicom自动转换BIDS格式 ——Heudiconv
- php json 转arraylist,从JSONArray转换为ArrayList CustomObject - Android
- 2022华为软件精英挑战赛-总结
- ubuntu16.04安装caffe教程(仅cpu)
- Navicat Preminm注册机 和源文件
- excel填充序列_EXCEL工资表制作后导入工资条方法,实现1秒搞定,万人群发
- 使用 vlmcsd 部署 KMS 服务器
- iOS APP调取短信 发送消息给其他人
- 配置文件工具类【ConfigTools】
- VSCode搭建Vue项目及服务器部署
- TakePhoto-轻量级Android照片处理框架
- html中图片不溢出,防止图片过大超出DIV的CSS样式
- SpringBoot + 秒杀系统
- 瑞典安百拓集团将把日本工厂搬到南京;好时在马来西亚开设新研发中心 | 美通企业日报...
- 中密歇根大学计算机专业,密歇根大学计算机工程排名,真是要细心看懂
热门文章
- Commons-Collections4 集合工具类的使用(一):集合操作
- 大数据笔记_Hadoop基础知识
- cartographer探秘之文章索引
- 论文阅读笔记(十)——Acoustic Scene Classification Using Reduced MobileNet Architecture
- CatBoost之算法解析(Kaggle常用模型)
- 十、MySQL的应用大全
- Asp.net(C#)年月日时分秒毫秒
- python匿名函数 与 内置函数
- ActiveX 技术疑点 一
- error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏	E:\OCX