使用Android 5.0的Camera v2拍照_android 5 cameraprovider.hascamera(cameraselector.-程序员宅基地

技术标签: android  

Android 5.0对拍照API进行了全新的设计,新增了全新设计的Camera v2 API,这些API不仅大幅提高了Android系统拍照的功能,还能支持RAW照片输出,甚至允许程序调整相机的对焦模式、曝光模式、快门等。


Android 5.0Camera v2主要涉及如下API

Ø CameraManager:摄像头管理器。这是一个全新的系统管理器,专门用于检测系统摄像头、打开系统摄像头。除此之外,调用CameraManagergetCameraCharacteristics(String)方法即可获取指定摄像头的相关特性。

Ø CameraCharacteristics:摄像头特性。该对象通过CameraManager来获取,用于描述特定摄像头所支持的各种特性。

Ø CameraDevice:代表系统摄像头。该类的功能类似于早期的Camera类。

Ø CameraCaptureSession:这是一个非常重要的API,当程序需要预览、拍照时,都需要先通过该类的实例创建Session。而且不管预览还是拍照,也都是由该对象的方法进行控制的,其中
控制预览的方法为setRepeatingRequest()
控制拍照的方法为capture()
为了监听CameraCaptureSession的创建过程,以及监听CameraCaptureSession的拍照过程,Camera v2 APICameraCaptureSession提供了StateCallbackCaptureCallback等内部类。 

注:CaptureSession 捕捉会话

Ø CameraRequest和CameraRequest.Builder:当程序调用setRepeatingRequest()方法进行预览时,或调用capture()方法进行拍照时,都需要传入CameraRequest参数。CameraRequest代表了一次捕获请求,用于描述捕获图片的各种参数设置,比如对焦模式、曝光模式……总之,程序需要对照片所做的各种控制,都通过CameraRequest参数进行设置。CameraRequest.Builder则负责生成CameraRequest对象。

=================================================================================

理解了上面API的功能和作用之后,接下来即可使用Camera v2 API来控制摄像头拍照了。控制拍照的步骤大致如下。

1.调用CameraManageropenCamera(String cameraId, CameraDevice.StateCallback callback, Handler handler)方法打开指定摄像头。该方法的第一个参数代表要打开的摄像头ID;第二个参数用于监听摄像头的状态;第三个参数代表执行callbackHandler,如果程序希望直接在当前线程中执行callback,则可将handler参数设为null

2.当摄像头被打开之后,程序即可获取CameraDevice—即根据摄像头ID获取了指定摄像头设备,然后调用CameraDevicecreateCaptureSession(List<Surface> outputs, CameraCaptureSession. StateCallback callbackHandler handler)方法来创建CameraCaptureSession。该方法的第一个参数是一个List集合,封装了所有需要从该摄像头获取图片的Surface,第二个参数用于监听CameraCaptureSession的创建过程;第三个参数代表执行callbackHandler,如果程序希望直接在当前线程中执行callback,则可将handler参数设为null

3.不管预览还是拍照,程序都调用CameraDevicecreateCaptureRequest(int templateType)方法创建CaptureRequest.Builder,该方法支持TEMPLATE_PREVIEW(预览)、TEMPLATE_RECORD(拍摄视频)、TEMPLATE_STILL_CAPTURE(拍照)等参数。
通过第3步所调用方法返回的CaptureRequest.Builder设置拍照的各种参数,比如对焦模式、曝光模式等。
调用CaptureRequest.Builderbuild()方法即可得到CaptureRequest对象,接下来程序可通过CameraCaptureSessionsetRepeatingRequest()方法开始预览,或调用capture()方法拍照。



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012306714/article/details/54561721

智能推荐

C3P0和Druid数据库连接池的简单使用;几种设计模式简介;简略介绍自定义数据库连接池注意点_c3p0连接池用的设计模式-程序员宅基地

文章浏览阅读577次。数据库连接池负责分配、管理和释放数据库连接;它允许应用程序重复使用一个连接,而不是新建连接,提高了程序的效率;由于新建数据库连接也是要耗费性能和时间的,当访问量十分巨大的时候,对程序性能的影响就极为显著,为了解决这个问题出现了数据库连接池的技术;C3P0连接池使用步骤1、导入jar包;2、导入配置文件到src目录下;(配置文件会自动导入,但是名字必须是c3p0-config.xml或者c3p0-config-properties)3、创建C3P0连接池对象;4、获取连接;5、使用连接;_c3p0连接池用的设计模式

vue修改config后怎么生效_vue.config.js 配置无效?-程序员宅基地

文章浏览阅读6.2k次。vue.config.js 位于根目录下使用vue-cli3构建的项目constpath=require("path");functionresolve(dir){returnpath.join(__dirname,dir);}module.exports={lintOnSave:true,//生产环境是否生成sourceMap文件producti..._vue.config.js 生效

SpringBoot 系列教程(三十):SpringBoot整合Mybatis增删改查注解版_springboot mybatis 使用查锁-程序员宅基地

文章浏览阅读2.9k次。源码:https://github.com/Thinkingcao/SpringBootLearning/tree/master/springboot-mybatis本文主要讲解如何使用SpringBoot整合Mybatis,并访问数据库。由于Mybatis这个框架太过于流行,所以这里不过多涉及Mybatis的知识。一、创建SpringBoot项目,引入配置信息0、项目结构1..._springboot mybatis 使用查锁

bzoj1047【haoi2007】理想正方形-程序员宅基地

文章浏览阅读832次。单调队列

linux addr2line 定位ASan Dump信息-程序员宅基地

文章浏览阅读1k次,点赞25次,收藏19次。解决linux user层代码出现crash定位大难题_linux addr2line 定位asan dump信息

关于interface接口的使用与理解-程序员宅基地

文章浏览阅读4.1k次,点赞2次,收藏21次。1、什么是interface接口?首先,接口是与类平行的结构,两者都是独立的一个结构,都有自己的定义与规则,接口不属于类2、如何定义interface接口?定义接口中的成员:在jdk7以前只能定义全局常量(使用public static final修饰的变量,通常可以省略不写)与抽象方法(类似于方法,但是没有方法体,使用public abstract修饰变量名)。注意在接口中不能定义构造器!意味着接口不可以被实例化new出对象。3、如何使用interface?只要编写了接口,意_interface接口

随便推点

ssh远程登陆执行命令:未找到命令_sshpass命令找不到-程序员宅基地

文章浏览阅读5.1k次。ssh远程登陆执行命令:未找到命令_sshpass命令找不到

浅谈Linux的locale,LC_ALL和LANG_lc——time-程序员宅基地

文章浏览阅读4.4k次。如果你是一个Linux新手,并且刚刚安装了一个新的英文系统但想要设置成中文系统,肯定会接触到上面几个变量,在网上搜索了一系列解决方法,给一些变量赋一下值,再export一下,或者写到配置文件里面,然后就搞定了,但究竟为什么要这样做,可能还是一知半解。通过这两天自己对网上看到的一些文章的整理和自己的试验,在这里记录一下自己的理解。一、什么是localelocale这个单词中文翻译成地_lc——time

Vue实现前端本地打包为一个zip文件_vant打包完项目,再次打包文件夹内容为zip-程序员宅基地

文章浏览阅读989次。1、应用场景:打包下载的批量二维码图片2、实际后端返回数据格式:图片联机数组集合,每个图片链接打开都是一张二维码图片3、代码实现如下:元素代码<el-button type="primary" icon="el-icon-download" size="mini" @click="downloadCode"> 下载二维码</el-button>js代码第一步安装依赖包_vant打包完项目,再次打包文件夹内容为zip

Java面向对象1----类与对象的定义和使用_java类和对象的定义和使用答案头歌-程序员宅基地

文章浏览阅读821次。介绍面型对象的概念,以及Java中类的定义和使用方法_java类和对象的定义和使用答案头歌

Java 搭建一个可交互的窗体程序_java窗体程序的主程序-程序员宅基地

文章浏览阅读2k次。简单地显示一个窗口所需的最少代码import javax.swing.JFrame;public class main { static class Win extends JFrame{//static不能少 Win() { setVisible(true);//setv } } public static void main(String[] args) { // TODO new Win(); }}报错:No enclosing instan_java窗体程序的主程序

Anti ptrace:去掉AlipayWallet的ptrace 反调试保护,进行lldb调试---仅用于参考学习-程序员宅基地

文章浏览阅读1.8k次。新的博客学习笔记前言code软件环境:Xcode硬件环境:iPhone5越狱手机、Mac开发工具: Cycript、LLDB、logos Tweak、hopper、MonkeyDev、AFLEXLoader、dumpdecrypted、debugserver、ssh、class_dump、hook本文采用tweak 的方式进行M..._lldb 绕过ptrace反调试

推荐文章

热门文章

相关标签