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. 练习1-13:编写一个程序,打印输入中单词长度的直方图(水平)(C程序设计语言 第2版)

    简单未考虑标点符号 #include <stdio.h> #define MAX_WORD_LEN 10 #define BLANK 0 #define IN_WORD 1 #define ...

  2. WindowsPhone技术和XNA技术

    介于公司目前还没有涉及WP(WindowsPhone)项目的开发,而我本身是学习WP开发的,因此在这里稍微入门的介绍一点WP的知识. 一.简介 Windows Phone具有桌面定制.图标拖拽.滑动控 ...

  3. 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.6,增加语音消息、语音留言等功能

    自从微信出来后,语音消息和语音留言变得非常流行,按下一个键说话,比打字要方便多了.GG在V3.6版本增加了对语音消息和语音留言(或称为离线语音消息)的支持.这两个功能的实现已经很完整,只是比较遗憾的一 ...

  4. 循序渐进做项目系列(2):最简单的C/S程序——消息异步调用与消息同步调用

    上篇博客 循序渐进做项目系列(1):最简单的C/S程序——让服务器来做加法 实现了一个最简单的C/S程序,即让服务器来做加法.当时为了通俗易懂采用了消息异步调用的方式.今天我们要采用消息同步调用的方式 ...

  5. 【Bugly干货】关于 Android N 那些你不知道的事儿

    今年3月,Google 破天荒提前半年发布了 Android N 开发者预览版.当然,作为一个不合格的谷粉并没有第一时间体验安装,因为至今仍然能够回忆起来去年今日此门中(雾)兴冲冲刷了 Android ...

  6. Hadoop日记Day12---MapReduce学习

    一.MapReduce简介 1.1MapReduce概述 MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题.MR由两个阶段组成:Map和Reduce ...

  7. JavaScript思维导图—函数基础

    JavaScript思维导图-来自@王子墨http://julying.com/blog/the-features-of-javascript-language-summary-maps/

  8. Linux tr命令

    介绍 tr命令可以对来自标准输入的字符进行替换.压缩和删除.tr只能接收来自标准的输入流,不能接收参数. 语法 tr [OPTION]... SET1 [SET2] 注意:SET2是可选项 OPTIO ...

  9. 如何开始DDD(完)

    连续写了两篇文章,这一篇我想是序的完结篇了.结合用户注册的例子再将他简单丰富一下.在这里只添加一个简单需求,就是用户注册成功后给用户发一封邮件.补充一下之前的代码 public class Domai ...

  10. 连接池技术 Connection Pooling

    原创地址:http://www.cnblogs.com/jfzhu/p/3705703.html 转载请注明出处 和数据库建立一个物理连接是一个很耗时的任务,所以无论是ADO.NET还是J2EE都提供 ...