Camera的简单使用浅析

由于最近工作上用到android.hardware.Camera这个类,于是简单的学习了一些基本用法。 
首先注意:Camera这个类在API21以后就不推荐使用了,官方提供了一个新的类名叫:Camera2,其中包含了新的回调机制,感兴趣的朋友可以仔细研究研究。 
Camera官方API Guide:无墙又懒得打开本地doc的朋友请戳: 
http://www.android-doc.com/guide/topics/media/camera.html

其中描述了使用Camera用以拍照的步骤: 
1. 从open (int cameraId)获取Camera的实例,在Android2.3以后可以传入相应的cameraId值来开启所选相机。注意:使用前需要调用getNumberOfCameras ()方法以获取当前设备拥有摄像头数量以确保设备拥有多枚摄像头可用;

2. 如需要的话,可以先调用getParameters()获取当前(默认)的settings,并定义Camera.Parameters对象,调用setParameters(Camera.Parameters)来进行Camera的配置。例如setWhiteBalance(String) 、setFocusMode(String value)等,之后需要跟上setParameters(Camera.Parameters)以确保设置成功;

3. 调用setDisplayOrientation(int)旋转屏幕,因为在Portrait模式下,摄像头采集的图像是逆时针旋转90度的。注意:该方法仅仅对于屏幕显示(也就是UI)有影响,不会影响摄像头采集的原始帧,所以如果使用onPreviewFrame(byte[] data, Camera)这个方法获取原始帧做Rotate的朋友,请不要在此类的官方API中再浪费时间了。

4. 将完全初始化的SurfaceHolder传入到setPreviewDisplay(SurfaceHolder)中,没有surface的话,相机不会开启preview预览;

5. 调用startPreview()用以更新preview的surface,必须要在拍照之前start Preview;

6. 接着,调用takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback)方法用以拍照,callback会提供图像数据;

7. 拍照后,preview display会停止,如果需要的话,再次使用startPreview()用以take more photos;

8. 调用stopPreview()停止preview surface的更新;

9. 调用release()方法用以释放相机的控制权,不然会导致之后使用摄像头的应用(包括本应用)打开摄像头的时候Crash。并且一般来说APP都应该在onPause()之后立刻进行release()的操作。

关于Camera的几个注意事项:

先说说我踩的坑: 
- 关于摄像头采集原始帧的方向问题:如果需要用到原始帧的朋友应该知道,Android(这里说的是API21以下)的相机采集方向始终都是landscape模式。所以官方提供的几个旋转的方法如:setDisplayOrientation(int), setCameraDisplayOrientation(), changeOrientationListener()等 都对onPreviewFrame中的数据没有影响的。)

官方说明:This does not affect the order of byte array passed in onPreviewFrame(byte[], Camera), JPEG pictures, or recorded videos. This method is not allowed to be called during preview.

【Android】Camera 使用浅析的更多相关文章

  1. Android Camera HAL浅析

    1.Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下: 景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为电信 ...

  2. 【Android】Android Camera原始帧格式转换 —— 获取Camera图像(一)

     概述: 做过Android Camera图像采集和处理的朋友们应该都知道,Android手机相机采集的原始帧(RawFrame)默认是横屏格式的,而官方API有没有提供一个设置Camera采集图像的 ...

  3. android camera setMeteringArea详解

    摘要: 本文为作者原创,未经允许不得转载:原文由作者发表在博客园:http://www.cnblogs.com/panxiaochun/p/5802814.html setMeteringArea() ...

  4. Android — Camera聚焦流程

    原文  http://www.cnphp6.com/archives/65098 主题 Android Camera.java autoFocus()聚焦回调函数 @Override public v ...

  5. android camera setParameters failed 类问题分析总结

    在 monkey test 测试中出现了一例 RuntimeException ,即 setParameters failed. LOG显示为:09-01 18:47:17.348 15656 156 ...

  6. Android Camera 相机程序编写

    Android Camera 相机程序编写 要自己写一个相机应用直接使用相机硬件,首先应用需要一个权限设置,在AndroidManifest.xml中加上使用设备相机的权限: <uses-per ...

  7. Android Camera 使用小结

    Android手机关于Camera的使用,一是拍照,二是摄像,由于Android提供了强大的组件功能,为此对于在Android手机系统上进行Camera的开发,我们可以使用两类方法:一是借助Inten ...

  8. Android Camera拍照 压缩

    http://www.linuxidc.com/Linux/2014-12/110924.htm package com.klp.demo_025; import java.io.ByteArrayI ...

  9. Android Camera 流程梳理

    毕业已经快两年了,一直没有写博客的习惯,这是第一篇,以后要慢慢养成这个习惯.毕业之后一直在做相机,先简单的梳理下Android Camera的流程. Android Camera 是一个client/ ...

  10. 【转】android camera(四):camera 驱动 GT2005

    关键词:android  camera CMM 模组 camera参数  GT2005 摄像头常见问题 平台信息: 内核:linux系统:android 平台:S5PV310(samsung exyn ...

随机推荐

  1. python string intern

    python  字符串是不可变的. 字符串pool会对 t "looklike" Python identifiers 字符串做intern缓存.

  2. java jstack命令详解

    名称jstack: stack trace 摘要: jstack [ option ] pid jstack [ option ] executable core jstack [ option ] ...

  3. 基于ejbca构建独立ca系统

    ejbca,是一个CA(Certificate Authority)系统软件,CA是数字证书认证中心的简称,主要功能是管理数字证书,包括证书的颁发.销毁.更新等,ejbca实现了CA规范,因此可以用来 ...

  4. 【转载】Fiddler进行模拟Post提交json数据,总为null解决方式

    Request Headers: User-Agent: FiddlerHost: localhost:3248Content-Type: application/json; charset=utf- ...

  5. 从现在开始,使用简单优雅的validata.js

    表单验证,是后台开发中万年不变的话题,在经历许多实战之后发现 使用优雅便捷的validate.js实现验证实在是一件非常愉悦的事情 <form data-validate> Enter: ...

  6. 开始VS 2012中LightSwitch系列的第4部分:太多信息了!使用查询来排序和筛选数据

    [原文发表地址]  Beginning LightSwitch in VS 2012 Part 4: Too much information! Sorting and Filtering Data ...

  7. Web Essentials之样式表StyleSheets

    返回Web Essentials功能目录 本篇目录 智能感知 视觉提示 验证 Web标准 转换器 Web Essentials中大多数的CSS功能也适用于LESS. 智能感知 生成供应商特定的属性 如 ...

  8. python--同一mysql数据库下批量迁移数据

    最近接手些mysql数据库维护,发现mysql在批量操作方面就是个渣渣啊,比起MS SQL SERVER简直就是“不可同日而语”. 咨询了下MySQL的高手,对于数据迁移这种问题,一种处理方式就是直接 ...

  9. java线程与并发(一)

    有好几个月没写博客了,各种破事儿忙完,决定继续写博客,恰好最近想了解下有关Java并发的一些知识,所以就准备这一段时间,用零碎的时间多记录一点有关并发的知识.希望这次能一直坚持下去. 想了解并发,必须 ...

  10. HTML+CSS学习笔记

    1,html里的实际有6个<hn>标记,从<h1>到<h6>,字体由大到小. 2,em标签表示斜体. 3,<p>标签是换一个段落,<br>标 ...