安卓Camera基础

1. Camera简介

虽然前文说道Android在5.0之后就推出了Camera2 API,但是各个厂家的基本未适配,导致目前市场上大部分机型使用的仍然是Camera1 API。PS:Android 9.0 Google强制要求各个平台厂商(高通/MTK/华为等)支持Camera2,不再兼容Camera1。

Camera API是Android非常古老的API,Google在5.0推出Camera2后就再也没有更新Camera。相比于Camera2来说,Camera API使用非常简单,由于这套框架使用很久了所以稳定性和兼容性还是值得信赖的。另外Camera API只提供基本的功能,其曝光/白平衡/曝光基本无法调节,这是相对于Camera2来说比较弱的地方。

2. Camera使用

有一点需要注意的是:
Camera设备是独占,也就是说你的APP在使用Camera设备的话,其它应用就没法使用。
所以要求在APP切换到后台时需要关闭Camera设备,重入时在重新打开。

3.Camera主要类

Camera可以说是底层相机设备的映射,所有对相机设备的操作都是通过Camera这个类完成。
常用方法:

open    打开相机设备,并返回一个Camera对象。
getParameters    获取Camera.Parameters
setParameters    设置Camera.Parameters
setPreviewTexture  设置用于输出的SurfaceTexture
startPreview  开始预览
stopPreview  结束预览
release  释放设备

autoFocus(AutoFocusCallback cb)相机自动对焦

cancelAutoFocus();//结束对焦操作

camera.setDisplayOrientation(90);   //设置camera预览的角度,因为默认图片是倾斜90度的
camera.setPreviewDisplay(holder);   //设置holder主要是用于surfaceView的图片的实时预览,以及获取图片等功能


Camera.Parameters
保存Camera设备支持的数据,允许用户设置响应的参数(主要是图像大小、格式、预览FPS等)。

4. Camera 操作流程

4.1 获取Camera权限

APP Manifest 声明

代码中权限检查

4.2配置Camera

常用的配置项:

        //图像格式
        mParams.setPictureFormat(ImageFormat.NV21);
        //图像分辨率
        mParams.setPreviewSize(prevSz.width, prevSz.height);
        //预览帧率
        mParams.setPreviewFrameRate(30);
        //对焦方式
        if (focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
            mParams.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
        }
 

4.3Camera的输出支持多种方式

SurfaceTexture:以纹理的形式输出
设置Camera.setPreviewTexture(surfaceTexture)
通过SurfaceTexture的onFrameAvailable回调输出每一帧
Buffer:以Buffer形式输出
通过Camera.setPreviewCallbackWithBuffer(buffer)接口输出
Surface:输出到Surface
通过设置Camera.setPreviewDisplay(surfaceHolder);

4.4 关闭Camera

Camera.stopPreview();

Camera.close();

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值