Camera2简要说明

在Google 推出Android 5.0的时候, Android Camera API 版本升级到了API2(android.hardware.camera2),大幅提高了Android系统拍照的功能,还能支持RAW照片输出,允许程序调整相机的对焦模式、曝光模式、快门等

源码地址

https://github.com/WuKaik/QuickCamera.git

需要了解camera2的几个重要类

  • CameraManager: 管理设备上的所有摄像头设备,主要是获取摄像头列表和打开指定的摄像头
  • CameraCharacteristics:摄像头特性,该对象通过CameraManager来获取,用于描述特定摄像头所支持的各种特性
  • CameraDevice: 具体的摄像头设备,主要是创建CaptureSession和CaptureRequest
  • CameraCaptureSession: 相机捕获会话,主要是处理拍照和预览,需要预览、拍照时,都需要先通过该类的实例创建          Session
  • CaptureRequest.Builder:负责生成CameraRequest对象
  • CaptureRequest: 通过CaptureRequest.Builder.build()后得到的一次捕获请求,用于描述捕获图片的各种参数设置,比如对焦模式、曝光模式……

使用简要说明

  • 获取CameraManager
  • 调用CameraManager.getCameraCharacteristics()方法得到CameraCharacteristics
  • 调用CameraManager.open()方法在回调中得到CameraDevice
  • 通过CameraDevice.createCaptureRequest()得到CaptureRequest.Builder,构建CaptureRequest对象
  • 通过CameraDevice.createCaptureSession() 在回调中获取CameraCaptureSession
  • 通过 CameraCaptureSession发送CaptureRequest, capture表示只发一次请求, setRepeatingRequest表示不断发送请求.
  • 在ImageReader.OnImageAvailableListener回调中获取拍照数据

主要代码截图

/*** 开始预览* 使用TextureView显示相机预览数据* Camera2的预览和拍照数据都是使用CameraCaptureSession会话来请求的*/private void startPreview() {SurfaceTexture surfaceTexture = textureView.getSurfaceTexture();//设置TextureView缓冲区大小surfaceTexture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());//获取Surface显示数据Surface surface = new Surface(surfaceTexture);try {//设置捕获请求为预览(还有其它,如拍照、录像)mCaptureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);//可以通过这个set(key,value)方法,设置曝光啊,自动聚焦等参数!!//mCaptureBuilder.set(CaptureRequest.CONTROL_AE_MODE,CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);//获取ImageReader(ImageFormat不要使用jpeg,预览会出现卡顿)mReader = ImageReader.newInstance(mPreviewSize.getWidth(), mPreviewSize.getHeight(), ImageFormat.YUV_420_888, 2);//设置有图像数据流时监听mReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {@Overridepublic void onImageAvailable(ImageReader reader) {//需要调用acquireLatestImage()和close(),不然会卡顿Image image = reader.acquireLatestImage();//将这帧数据转成字节数组,类似于Camera1的PreviewCallback回调的预览帧数据ByteBuffer buffer = image.getPlanes()[0].getBuffer();byte[] data = new byte[buffer.remaining()];buffer.get(data);//Log.d(TAG, "onImageAvailable: data size"+data.length);image.close();}}, mHandler);//设置预览界面为数据的显示mCaptureBuilder.addTarget(surface);mCaptureBuilder.addTarget(mReader.getSurface());//创建相机捕获会话mCameraDevice.createCaptureSession(Arrays.asList(surface, mReader.getSurface()), mCaptureStateCallback, mHandler);} catch (CameraAccessException e) {e.printStackTrace();}}
 private CameraCaptureSession.StateCallback mCaptureStateCallback = new CameraCaptureSession.StateCallback() {@Overridepublic void onConfigured(@NonNull CameraCaptureSession session) {//创建捕获请求mCaptureRequest = mCaptureBuilder.build();mCameraSession = session;try {//设置反复捕获数据的请求,这样预览界面就会一直有数据显示mCameraSession.setRepeatingRequest(mCaptureRequest, null, mHandler);} catch (CameraAccessException e) {e.printStackTrace();}}@Overridepublic void onConfigureFailed(@NonNull CameraCaptureSession session) {}};

Android Camera2 相机预览、获取数据相关推荐

  1. Android Camera2相机预览画面放大缩小(数码变焦DigitalZoom)功能实现

    一.前言 Android自定义相机开发中,常常会有通过手势放大或缩小相机预览画面的需求,即数码变焦DigitalZoom. 二.接口说明 1. 获取最大的放大倍数 float maxZoom = mC ...

  2. android 圆形相机预览拍照_Android多种方式实现相机圆形预览

    最终效果图如下: 一.为预览控件设置圆角 public RoundTextureView(Context context, AttributeSet attrs) { super(context, a ...

  3. android 圆形相机预览拍照_Android多种方式实现相机圆形预览的示例代码

    效果图如下: 一.为预览控件设置圆角 public RoundTextureView(Context context, AttributeSet attrs) { super(context, att ...

  4. 关于SurfaceView相机预览获取Bitmap的方法

    为什么80%的码农都做不了架构师?>>>    昨天在网上找了很久SurfaceView截屏方法,canvas转bitmap方法...... 发现国内网站上太多坑了!!!Google ...

  5. android自定义相机预览尺寸,相机在Android中,如何获得最佳尺寸,预览尺寸,图片尺寸,视图尺寸,图像扭曲...

    混合来自OpenGL和 Android相机的视图时图像失真,以便在使用takepicture方法时获取两者的图像.我查了一下,发现相机图片设置为640X480,openGL视图和相机预览都设置为128 ...

  6. android+相机画面旋转,Android:相机预览的屏幕方向/旋转

    我已经创建了一个相机应用程序,我想让我的应用程序在所有4个可能的方向转换,并相应地更新相机预览.因为我已经使用我从以下复制的以下方法: Android – Camera preview is side ...

  7. Android Camera相机预览,拍照 ,横屏竖屏的处理

    功能分别是: 1.竖屏的前置,后置显示 加 拍照 2.横屏的前置,后置显示 加 拍照 整个项目的代码贴出来了,里面加了有备注,不理解的也可以去参考官网点击跳转到官网 首先选择前置后置布局效果如下 布局 ...

  8. Android Camera1相机预览

    切换相机 / void switchCamera(int facing); /* 设置Facing / void setCameraFacing(int facing); /* 获取Facing / ...

  9. Android调用相机预览黑屏app passed NULL surface解决

    由于项目需求,要实现一个调用相机拍照然后将矩形框中的部分切割出来的功能,于是在网上找了 一个PlayCamera的demo程序.但运行的时候发现,只有第一次安装上时拍照界面能成功预览,一旦用back按 ...

最新文章

  1. javabean属性的类型选择包装类还是基本数据类型
  2. zabbix3.0禁用guest用户
  3. 数据分析:2020年3月汽车工业经济运行情况
  4. 循环往list中add对象却总是add的是一个对象
  5. sap.ui.layout.form.SimpleForm.prototype
  6. 2021-09-211547G - How Many Paths?
  7. 少儿是先学计算机 还是学机器人,机器人学习和少儿编程有什么区别?
  8. android 加载大长图,android加载长图片的方法
  9. mysql组合索引与字段顺序
  10. 吴恩达神经网络和深度学习-学习笔记-39-计算机视觉现状
  11. 学生信息管理系统[有软件截图]
  12. VMware虚拟机下载、安装与使用
  13. 安装ie11提示计算机安装了更新的版本,离线安装IE11浏览器提示quot;获取更新quot;解决方法 - 191路由网...
  14. java可视化工作流_强大的java工作流引擎,可视化开发工作流
  15. 基于W800的AIOT离在线一体方案说明 (阿里飞燕+离线语音控制)
  16. LaTeX新手入门以及TeXlive和TeXstudio的安装使用
  17. 最全的Excel-sumif函数多条件求和案例汇总
  18. PHP用GD库实现简单的验证码
  19. java实现文字识别营业执照识别(百度、讯飞)
  20. 对吃鸡APP的逆向分析

热门文章

  1. carve into_carve的用法和短语例句
  2. Java:java学习笔记之锁机制的简单理解和使用
  3. 网络加速_电狐H1Z1加速器轻松解决网络难题,低延迟吃鸡
  4. SpaceX飞船与国际空间站成功对接!马斯克跨越里程碑
  5. Microsoft Visual Studio Key
  6. Mybatis——java 类型对应表
  7. 学生信息管理系统 —— 前端篇
  8. 1087 有多少不同的值
  9. 将Flash制作的AIR应用移植到iOS设备
  10. java 批量更新方法