Camera2预览拍照流程

Camera2是现在Andoird相机开发中经常使用的框架,最近一直在学习Camera2的使用,今天简单分享一下我学到的Camera2的预览拍照的流程。

1、获取相机服务,在Camera2中相机服务的管理使用CameraManager对象来进行,所以第一步是获取相机服务。

CameraManager mCameraManager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);

2、获取相应的CameraDevice,想要具体的使用某个摄像头进行工作,获取相机服务之后需要获取相应的摄像头设备(即CameraDevice)。

//获取相应的CameraId列表
String[] mCameraIdList = mCameraManager.getCameraIdList();
//从CameraIdList中选择你需要的摄像头Id
//CameraId:选用的摄像头Id, CameraDevice.StateCallback:CameraDevice的状态回调,监听CameraDevice是否打开之类的状态, handler:绑定的handler
mCameraManager.openCamera(CameraId,CameraDevice.StateCallback,handler);
//在CameraDevice.StateCallback中选择CameraDevice
CameraDevice.StateCallback(){
public void opened(CameraDevice cameradevice){
mCameraDevice = caneradevice;
}
}

3、创建CaptureRequest.Build对象,CaptureRequest.Build对象主要是用来添加请求的对象以及供之后的CaptureSession进行动作的。

//这里以预览为例,使用预览模板
CaptureRequest.Buildr mCaptureRequest = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
//添加对象
mCaptureRequest.addTarget(previewSurface);

4、创建会话CaptureSession,CaptureSession主要用于完成Capture的请求(比如预览,拍照)。

mCameraDevice.createCaptureSession(List<Surface>,new CaptureSession.StateCallback{
    public void onConfiged(CaptureSessoin capturesession){
        mCaptureSession = capturesession;
        //设置一些AF,AE之类的参数
        mCapturesession.setReaptingRequest(mCapturerequest.build(),listener,handler);
    }
}

到这里的话相机就已经可以开始预览了。

5、拍照,拍照经常是在预览的时候通过点击事件进行监听发送Capture请求进行拍照。

CaptureRequest.Builder takePictureCaptureRequest = mCameraDevice.CreateCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
takePictureCaptureRequest.addTarget(mImageReader.gteSurface);

//设置拍照AE,AF,拍照方向之类的
mCaptureSession.capture(takePictureCaptureRequest.build(),new CameraCaptureSesion.CaptureCallback(){
     public void onCaptureCompleted(session,request,result){
        startPreview();
    }
},handler);

也有博主说mCaptureSession.capture()之前需要先停止预览,其实不需要,因为Camera2中拍照的优先级是高于预览的,所以不用手动停止,所以onCaptureCompleted()里面的startPreview()也可以不用。

6、使用ImageReader.OnImageAvailableListener()监听,从ImageReader中取出图片保存。

//在ImageReader初始化之后对ImageRder添加监听
mImageReader.setOnImageAvailableListener(mImageReaderListener,handler);

ImageReader.OnImageAvailableListener mImageReaderListener = new ImageReader.OnImageReaderAvailable(){
       public void onImageAvailable(ImageReader imageReader){
        Image iamge = imageReader.acquireNextImage();
        //保存图片
        //保存玩图片之后一定要记得释放资源
        image.close();
    }

}

基于Camera2的预览拍照流程简单的就是这样,希望对大家能有所帮助,同时有错误希望大家指出,谢谢。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值