【Android】Camera 使用浅析
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 使用浅析的更多相关文章
- Android Camera HAL浅析
1.Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下: 景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为电信 ...
- 【Android】Android Camera原始帧格式转换 —— 获取Camera图像(一)
概述: 做过Android Camera图像采集和处理的朋友们应该都知道,Android手机相机采集的原始帧(RawFrame)默认是横屏格式的,而官方API有没有提供一个设置Camera采集图像的 ...
- android camera setMeteringArea详解
摘要: 本文为作者原创,未经允许不得转载:原文由作者发表在博客园:http://www.cnblogs.com/panxiaochun/p/5802814.html setMeteringArea() ...
- Android — Camera聚焦流程
原文 http://www.cnphp6.com/archives/65098 主题 Android Camera.java autoFocus()聚焦回调函数 @Override public v ...
- android camera setParameters failed 类问题分析总结
在 monkey test 测试中出现了一例 RuntimeException ,即 setParameters failed. LOG显示为:09-01 18:47:17.348 15656 156 ...
- Android Camera 相机程序编写
Android Camera 相机程序编写 要自己写一个相机应用直接使用相机硬件,首先应用需要一个权限设置,在AndroidManifest.xml中加上使用设备相机的权限: <uses-per ...
- Android Camera 使用小结
Android手机关于Camera的使用,一是拍照,二是摄像,由于Android提供了强大的组件功能,为此对于在Android手机系统上进行Camera的开发,我们可以使用两类方法:一是借助Inten ...
- Android Camera拍照 压缩
http://www.linuxidc.com/Linux/2014-12/110924.htm package com.klp.demo_025; import java.io.ByteArrayI ...
- Android Camera 流程梳理
毕业已经快两年了,一直没有写博客的习惯,这是第一篇,以后要慢慢养成这个习惯.毕业之后一直在做相机,先简单的梳理下Android Camera的流程. Android Camera 是一个client/ ...
- 【转】android camera(四):camera 驱动 GT2005
关键词:android camera CMM 模组 camera参数 GT2005 摄像头常见问题 平台信息: 内核:linux系统:android 平台:S5PV310(samsung exyn ...
随机推荐
- 在Python中调用glutInit遇到OpenGL.error.NullFunctionError的解决方法
在window10 64bit + Python环境下,通过pip install PyOpenGL成功之后,无奈执行到glutInit()时候总是报错. OpenGL.error.NullFunct ...
- 编译PHP5缺t1lib包安装
t1lib_doc.dvi Error解决: 1. 下载t1lib-5.1.2.tar.gz2. 解决依赖关系:sudo apt-get build-dep t1lib 3. 安装:./configu ...
- 控制反转容器& 依赖注入模式 ---读感。
几个web框架 : sprint Avalon PicoContainerclass MovieLister MovieFinder finder = ServiceLocator.movieFind ...
- alert的换行问题
一种比较复杂的方法,但这种方法使用起来对所有型号的浏览器都能任意分辨: //浏览器类型判定 function getOs() { if(navigator.userAgent.indexOf(&quo ...
- PDO vs. MySQLi 选择哪一个?(PDO vs. MySQLi: Which Should You Use?)-转载
用Php访问数据的时候,你选择MySQLi和PDO,在选择之前,你应该知道些什么呢? 这篇文章将会介绍这两种方式的不同点,数据库的支持.稳定性.性能等问题. 概述 PDO MySQLi Datab ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.0,完善基础功能(源码)
(前段时间封闭式开发完了一个项目,最近才有时间继续更新GG的后续版本,对那些关注GG的朋友来说,真的是很抱歉.)GG的前面几个版本开发了一些比较高级的功能,像视频聊天.远程桌面.文件传送.远程磁盘等, ...
- 初探ECMAScript6
基础变化 String类型新增了三个方法,不必使用indexOf来判断一个字符串是否在另一个字符串内 //String changes var a = "Hello world"; ...
- ECMAScript 6 简介
ECMAScript 6 是JavaScript的下一个标准,正处在快速开发之中,大部分已经完成了,预计将在2014年正式发布.Mozilla将在这个标准的基础上,推出JavaScript 2.0. ...
- win10最新预览版9926使用评估
1月21日微软发布会,终于在周一发布了新的预览版本Build 9926,这个并不是客户预览版,仍然是开发者预览版,如图: 如果要查看自己的windows 10是那个版本,打开运行窗口,输入如下命令: ...
- WCF Data Service
WCF Data Service:http://www.cnblogs.com/shanyou/category/240225.html