如何快速编写一个Camera的Demo

作者因工作需要学习Camera应用和数据量问题,打算写一个Camera的demo。文章介绍了快速编写可预览Camera应用的步骤,包括创建布局文件、加载布局与初始化控件、获取权限、初始化Camera、开启Camera、进入预览流程等,完成后还可增加功能。

    最近在学习Camera相关的一些东西,再这里做一下笔记,也算给自己一份动力。


    由于工作需要,现在要开始学习Camera的一些应用和数据量的问题,由于之前一直是做bsp的,对于java开发不是特别熟悉,所以现在相当于重新开始,我的想法就是自己写一个Camera的demo,实现基本的预览拍照功能,以此为切入点,先了解应用的实现,然后再去一点点深入了解数据流等逻辑问题。(ps:之前自己学习了一点android app的开发,对于Android studio 、sdk 等工具和android app的生命周期等有点点了解,所以此文也就以此为基础,来开始记录)。

如何编写一个可以预览的Camera应用呢?

很多时候,我们都想自己写一个demo,但是由考虑到camera这种会调用系统数据通道的,做起来会比较麻烦,同时sdk中过关于Camera的接口和类也非常多,有点无从下手,其实我们大可不必担心,android发展到现在的版本,apk的开发工作已经非常系统化,sdk中已经尽可能的集成了很多应用的标准框架和接口,大家只需要按照步骤去执行调用,一般都不会有太大问题。下面我就介绍一下我最近学习的编写Camera的几个步骤,基本按照这个流程调用就可以完成Camera的预览了。

下面我们就来看一看快速编写一个可预览的Camera应用需要哪些步骤呢:

1、首先我们需要创建一个布局文件,也就是我们打开apk后显示的画面,因为是一个demo,所以我们的布局文件也很简单,就一个SurfaceView,用来现实Camera预览画面的,代码如下:

2、接下来就是在主类中onCreat加载布局文件,同时初始化控件调用initView(),在Android6.0 之后要求app需要获取系统权限,比如打开camera的权限,读写sdcard的权限等(用来存图,读取配置文件等)

3、 在initView中初始化了SurfaceView控件,同时需要装载SurfaceHold对象,用来监听SurfaceView的生命周期,我们可以把camera相关的初始化流程(initCamera2)装载在这个位置,为后面的camera打开流程做准备

4、在Camera的初始化流程中,我们启动了一个线程,同时设置了图像的数据格式和分辨率,建立一个图像可用监听器,为后面需要拍照或者做帧数据处理提供接口,如果你仅仅是为了预览,就只用建立一个线程就可以了,直接跳过第5步,看第6步就行

5、重写onImageAvailable 方法,可以在此处做一些你需要的处理,需要注意的是要这里能获取到数据,在后面需要将ImageRead的对象装载到后面previewRequestBuilder 中才行

6、在onCreat中我们去申请了权限,在权限申请ok后,会到下面这个回调函数中,我们在这个函数中去开启camera

 

7、开启camera的方法也很简单,就是获取到系统的Camera服务,然后直接调用openCamera方法开启,注意第一个参数cameraId就是camera的id号,一般1是前置,0是后置

8、在openCamera函数执行成功后,会进入stateCallback回调函数,这个里面就有三个方法,分别对应打开摄像头,断开摄像头以及报错的回调,我们在打开摄像头中加载预览函数,进入预览流程,同时要在断开摄像头中将CameraDevice释放

9、现在进入了Camera的预览流程了,我们依然使用系统的接口,首先是获取到CaptureRequest的builder,然后将surfaceView的对象加载进入,最后调用setRepeatingRequest方法进行数据预览。

(如果想让第5步中的方法也能跑起来,这里需要装载进ImageRead的对象,增加方法是

Arrays.asList(outputTarget)

修改为:

Arrays.asList(outputTarget,mImageReader.getSurface())

 

好了,这样我们一个简单的可以预览的Camera的demo就完成了,后面我们可以自己增加一些功能,比如前后置的切换,拍照存图,录像等等。

打开下面链接,直接免费下载资源: https://renmaiwang.cn/s/3swik Camera2是Google推出的一个Android相机应用接口,它在Android Lollipop 5.0版本中引入,相比之前版本的Camera API,它提供了更多的控制选项,使得开发者能够更精细地控制相机硬件。Camera2允许访问相机的高级功能,例如手动控制曝光和对焦、高动态范围(HDR)摄影、raw图像格式获取等。此外,它还支持同时使用多个摄像头,如前置和后置摄像头,以及更复杂的图像处理流程。 Camera2的基本应用包括了对设备上相机硬件的初始化,以及相机会话的建立。开发者需要通过Camera2 API创建一个CameraDevice和CameraCaptureSession对象,然后可以对相机进行配置。比如,可以设置输出图像的大小和格式,配置输出的图像流方向,启动预览或者拍照,以及控制图像的捕获参数等。 在Camera2 API中,有一个非常重要的概念叫做CameraCharacteristics,它是一个键值对的映射,包含了关于相机硬件能力的信息。开发者可以通过查询CameraCharacteristics获取相机的基本能力,例如是否支持自动对焦,是否有闪光灯,以及摄像头的分辨率范围等。 为了适应不同光照环境,Camera2还引入了控制曝光和对焦区域的概念,允许开发者指定对焦和测光的位置。这种灵活性在专业级摄影应用中尤其有用。另外,Camera2还提供了用于图像处理的Surface,开发者可以通过这些Surface获取经过处理的图像数据,或者直接进行编码保存。 Camera2官方DEMO则是Google为了帮助开发者更好地理解和使用Camera2 API而提供的一个示例项目。这个项目通过代码实例演示了如何使用Camera2 API的各个组件以及如何结合这些
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值