Android Camera的初步接触

本文详细阐述了Android Camera API的使用逻辑与实践过程,包括如何打开与关闭摄像头、设置参数、预览与停止预览等功能。通过实例代码,帮助开发者理解和应用Camera API,实现图像处理与视觉应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        最近在做一个车道识别以及偏离预警的项目,之前一直用C++编写图像处理的代码,然后用Android NDK进行调用,因为用的是Opencv进行开发,所以一直调用的是JavaCamera,而现在想用fastcv进行相应的实现,所以要用到Camera,而之前对Camera的了解也仅停留在理论上,一时之间无从下手,于是各种百度,以及查看Android API,在这里,我打算从最简单的对Camera的调用进行入手,从逻辑上进行整理,以便我自己以后进行查阅。

        这次对Camera的调用,主要是参考Android官方API给的Camera介绍而写的,虽然非常简单,但因为初次接触,且为了完全搞懂它,还是费了些时间的。

        首先,我们先从逻辑上来整理Android是怎么调用Camera的。我们知道,要调用Camera,必需先打开(Camera.open())Camera,就好像我们用相机照相一样,得开机才行。打开Camera之后,我们就获得了Camera这个类,我们可以对这个类进行很多操作,如设置Camera的参数(setParameters(Camera.Parameters) )、设置方向( setDisplayOrientation(int) ) 、开始预览(startPreview())、停止预览等(stopPreview())。其实此时,Camera的调用就只需要做这些工作,即可使用,但有个很重要的问题,我们必须创建一个SurfaceView来预览(其实Camera自己已经能预览了,但我们自己却什么都看不到),所以在Camera进行startPreview()之前,需通过setPreviewDisplay(SurfaceHolder)来将SurfaceView与Camera进行关联。

        下面我们从代码上来看,首先,我先编写了一个简单的SurfaceView:

        CameraSurface在继承了SurfaceView的基础上,我们还实现了了SurfaceHolder.Callback。这时候,我有了疑问,如果我不在 surfaceCreated 方法中为Camera进行 setPreviewDisplay(SurfaceHolder),那么我无法正常预览。所以这就是为什么我需要自己创建一个SurfaceView,并传入Camera,在实现SurfaceHolder.Callback接口中的 surfaceCreated的方法中为Camera传递SurfaceHolder。当然,如果只需要一个简单的SurfaceView,那么我们可直接用SurfaceView,而不必须自己创建新的类,只不过,我们需通过SurfaceView调用getHoler()得到SurfaceHolder,并为它addCallback(SurfaceHolder.Callback callback)实现surfaceCreated方法以为Camera设置SurfaceHolder。

       下面来看我的Activity:


   CameraActivity可以说完全是按官方 API的步骤来实现的,很简单,不再细说。
   下面是我的AndroidManifest文件

  
   可以说,调用Camera真的很简单,但我觉得一定要从逻辑上去理解它才能一劳永逸。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值