使用Android 5.0的Camera v2拍照

Posted 楠来风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Android 5.0的Camera v2拍照相关的知识,希望对你有一定的参考价值。

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()方法拍照。


以上是关于使用Android 5.0的Camera v2拍照的主要内容,如果未能解决你的问题,请参考以下文章

Android Camera2 ImageReader 大小在 Android 5.0 Galaxy S5 上不正确

android Camera2 API使用详解

Android Cordova 5.0+ 相机崩溃

android camera能不预览就拍照吗

Android Camera2 拍照入门学习

玩转Android Camera开发:使用TextureView和SurfaceTexture预览Camera 基础拍照demo