因为准备参加比赛的项目涉及到androID 相机,所以记录一下这几天学到的有关camera2 API的使用。
GitHub地址
这是谷歌camera2的相机示例,网上大部分代码和讲解都是参考这个来的,我也是通过看这些代码和别人的博客来学习的。
上面的这个代码,谷歌已经没有更新维护了,最新的有关相机示例的GitHub仓库地址是这个:最新相机示例GitHub地址
这些示例使用的是kotlin语言,上面旧的使用java。
这里放一些我看过的比较不错的相关博客教程,也方便自己以后回顾:
Android Camera2 教程 · 第一章 · 概览
Android 音视频开发(三) – Camera2 实现预览、拍照功能
Android Camera2Demo学习
首先,这是我学习后 画的camera 2 相机预览代码的流程图
你可以先看一遍谷歌camera2实例代码,然后再来对照这个图和我下面说的步骤,这样你对整个代码流程就比较清晰了。
从获取相机服务到展示预览画面,用到的部分camera2 API流程如图所示:
第一步,在布局文件中添加TextureVIEw控件,该控件用于展示预览画面。在代码中给该控件实例设置监听SurfaceTextureListener,在onSurfaceTextureAvailable()方法中(该方法会在SurfaceTexture准备好后调用)执行以下步骤;
第二步,获取相机服务得到相机管理类实例CameraManager;
第三步,调用cameraManager实例的getCameraIDList()方法,在得到的相机ID列表中选择一个你要的相机ID;
第四步,调用getCameracharacteristics(cameraID)方法,传入相机ID,得到装有该相机配置信息的Cameracharacteristics实例。通过characteristics.get(参数)方法可以获取该相机的朝向(前置,后置)、传感器方向、是否指支持camera2高级特性 等信息,以及通过characteristics.get(Cameracharacteristics.SCALER_STREAM_CONfigURATION_MAP).getoutputSizes(SurfaceTexture.class)可以得到相机支持的预览尺寸列表,进而选取最合适的预览尺寸;
第五步:调用cameraManager的
openCamera(cameraID,CameraDevice.StateCallback,handler)方法打开相机,在StateCallback的onopened()方法中得到CameraDevice实例;
第六步:配置用于展示画面的surface,通过
new Surface(textureVIEw.getSurfaceTexture())得到surface实例对象;
第七步:调用CameraDevice实例的createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)方法得到CaptureRequest.Builder,调用它的addTarget(surface)方法和surface进行绑定,再使用build()方法创建CaptureRequest实例对象;
第八步:调用cameraDevice的createCaptureSession()方法,在回调中拿到
CameraCaptureSession实例,用该实例的
setRepeatingRequest(captureReques,callback,handler)方法开始预览。
则此,你就能在手机上看到预览画面了,拍照功能我没有继续看,因为要做的项目没有拍照这个需求。
上面是我大概的思路总结,很多方面没有说到,例如 选取最优预览画面,修复预览方向等
关于各种类的更详细介绍,你可以看这篇博客:
Android Camera2 教程 · 第一章 · 概览
以上是内存溢出为你收集整理的Android camera2学习总结全部内容,希望文章能够帮你解决Android camera2学习总结所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)