android系统相机实时数据采集流程,Android摄像头获取实时数据+Demo
前言
首先需要用到的是一个叫Camera类的,更新的一个叫Camera2的类。
Camera2是从 SDK 5.0(API Level 21)开始才被引入的。里面的方法有些还是比原来的方便许多的,但是,用户系统版本参差不齐,所以暂时还是使用Camera来进行开发。
SufaceView
这个View可以直接重内存或者DMA等硬件接口获取所得的图像数据,是个非常重要的绘图容器,所以,开发相机应用一般都是使用它。
SurfaceView可以在主线程之外的线程中向屏幕绘图,这样可以避免画图任务繁重的时候,造成主线程的阻塞,从而提高了程序的反应速度。
使用SurfaceView,一般要实现一个SurfaceHolder.Callback接口,通过此接口。因为使用SurfaceView,所有的绘图工作必须得在Surface被创建之后才能开始,而在Surface被销毁之前必须结束,所以Callback中的surfaceCreated和surfaceDestroyed就变成了绘图处理代码的边界。
需要重写的方法:
surfaceChanged(SurfaceHolder holderformatwidthheight){}
surfaceCreated(SurfaceHolder holder){}
surfaceDestroyed(SurfaceHolder holder) {}
SurfaceHolder,可以把它看成是surface的控制器,用来操纵surface。处理它的Canvas上画的效果和动画,控制表面,大小,像素等等。
一般步骤:
检测并访问摄像头,判断摄像头是否可访问
创建预览,SurfaceView控件预览,并且实现SurfaceHolder接口。此控件能预览摄像的实时图像。
其他二次开发操作:如设置监听来拍照,保存照片啊,等等其他开发。
释放摄像头,摄像头使用完毕,应用程序必须正确的释放,方便第二次调用或其他程序使用。
Camera
Camera类中的一些处理都是通过Callback来进行的:
mCamera.autoFocus(mAutoFocusCallback)
其中mAutoFocusCallback继承自Camera.AutoFocusCallback接口,用户可以自定义的是对焦完成后的操作(比如延迟拍照等);
Camera类中的一些处理都是通过一堆Callback来进行的:
mCamera.takePicture(shutterCallbackrawCallbackjpegCallback)
比如实现拍照的操作
mCamera.setPreviewCallback(previewCallback)
这个方法可以获取到相机实时处理的Callback,然后通过重写其中的方法获取到相机通过摄像头获取的实时数据,这个就对二次开发十分重要,这个Callback也是十分重要的。
注意事项:
初始化相机时要先遍历设备上相机的个数,然后再通过
cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT
去选择是前置还是后置,再用
Camera.open(camIdx);
带参数的open(index)方法打开。
若要处理实时获取的数据,建议新开一个AsyncTask来完成,把耗时操作放入doInBackground方法里。
@Override
protected Object doInBackground(Object[] params) {}
记得在使用完后或者切换界面时需要释放相机资源,把Callback设置为空。
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera = null
例子:打开前置摄像头并且实时获取数据
android系统相机实时数据采集流程,Android摄像头获取实时数据+Demo相关推荐
- android系统自动休眠代码流程,Android P 电源管理(4)待机流程
电视遥控器,短端走待机(str待机)流程, 长按是关机,走关机流程,记录下待机流程. 参考博客 待机流程 Android P引入自动待机功能,只有存在WakeLock,wakeup_count就不会为 ...
- android系统相机实时数据采集流程,Android 摄像头采集与数据处理
android Camera2使用 前言:由于有关camera2使用和对数据处理的比较少所以笔者也有着乐于助人心所以有了后面的内容.咋们废话不多说先把流程和目的说下.首先是获取到相关摄像头id.然后打 ...
- 在android添加数据采集,一种基于Android系统的地理信息数据采集方法与流程
本方法属于采集地理信息数据的发明,是一种基于android操作系统和gis地理信息系统进行户外地理信息数据采集的方法. 背景技术: 众所周知地理信息数据采集在很多行业中都有应用,比如说农业中的土地普查 ...
- 深入Android系统(十二)Android图形显示系统-2-SurfaceFlinger与图像输出
最近有些忙,切实体验了一把拖更的羞耻感 ( *︾▽︾) 本文和上一篇深入Android系统(十二)Android图形显示系统-1-显示原理与Surface关系比较密切,撸完前篇更易理解本文啦 (๑‾ ...
- Android系统自带样式(android:theme)(转)
Android系统自带样式(android:theme)(转) android:theme="@android:style/Theme.Dialog" : Activity显示为对 ...
- android系统toast是什么意思,Android - Snackbar vs Toast - 使用和区别
Android - Snackbar vs Toast - 使用和区别 到目前为止,我们一直在我们的应用程序中使用Toasts,因为我们计划采用Support Design Library的一些新功能 ...
- pc使用android,如何在电脑上使用Android系统在PC上玩玩Android游戏
由于很多原因,搭载Windows及Android双系统的产品一直没有大规模上市,而类似华硕Transformer Book Trio这样的双系统产品价格则高达万元.那么,如果你想体验一下Android ...
- Android系统字体加载流程
一.背景 视觉同学提了一个需求,要求手机中显示的字体可以支持medium字体,经过分析,android原生的字体库中并没有中文的medium字体,如果使用bold,显示又太粗,为满足需求,需要分析an ...
- android启动流程之lk,Android系统之LK启动流程分析(一)
1.前言 LK是Little Kernel的缩写,在Qualcomm平台的Android系统中普遍采用LK作为bootloader,它是一个开源项目,LK是整个系统的引导部分,所以不是独立存在的,但是 ...
最新文章
- cocos2d-x 连帧动画实现
- layui表格更改一列数据_layui数据表格隐藏列的方法介绍
- Python UDP聊天器
- μC/OS-Ⅱ的移植
- 平庸技术流,用 WebApi +AngularJS 实现网络爬虫
- Java中map关于putAll()和“=”的区别
- FileInfo类 c# 1614533684
- 没有基础的想转行学习Python怎么学
- spark学习-75-源代码:Endpoint模型介绍(6)-Endpoint的消息的接收(2)
- [论文阅读] A Late Fusion CNN for Digital Matting
- PL/SQL中,declare定义变量和variable定义变量的区别?
- shell脚本 把一个文件的内容全部转换为大写
- 微信个人号API开发
- 最新高品质+武汉城区建筑物范围面shp格式+小区大厦学校医院占地面积
- 企业级BOM项目建设概况
- 假期即将结束,前方道路还很长……CLANNAD,16话,渚就这么香消玉殒了……
- ABAQUS|多重约束的解决办法!(过约束/螺栓预紧力)
- bootstrap3 表单构建器_Knex - 灵活轻便的 Node.js SQL 查询构建器
- 集合框架|Java集合框架基本使用
- Java 使用 long 出现空指针异常
热门文章
- 反混淆JavaScript
- 年产3000吨冲压型果味硬糖生产车间工艺设计
- Capture One 22 最新推出全景拼接功能
- 三步使用Docker容器创建RoboCup仿真2D环境
- 手机计算机怎么玩24点游戏,计算器游戏怎么玩_计算器游戏新手玩法介绍_快吧手游...
- linux安装activeMQ 5.16 以及集群环境
- Mac下安装homebrew(解决error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL)
- Git和Gitee的使用(仅分享一下自己成功的过程)
- Apple的M1 MacBook Pro 与 2020年的Intel MacBook Pro速度对比测试
- SpringBoot-21-统一日志框架