【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 ...
随机推荐
- Ubuntu Tftpd服务配置
---恢复内容开始--- 服务器端(ip:192.168.1.100) #安装tftpd-hpa sudo apt-get install tftpd-hpa 修改配置文件 sudo vim /etc ...
- sql 优化 链接提示 查询提示 标提示
SQL Server的查询优化器在select查询执行的时候产生一个高效的查询执行计划.如果优化器不能选择最优的计划,那么就需要检查查询计划.统计信息.支持的索引等,而通过使用提示可以改变优化器选择查 ...
- ASP.NET 4.5.256 has not been registered on the Web server. You need to manually configure your Web server for ASP.NET 4.5.256 in order for your site to run correctly
Microsoft .NET Framework 4.6安装后,用户可能会在使用Microsoft Visual Studio 创建(或打开现有项目时)网站.或Windows Azure项目时遇到下面 ...
- React Native移动框架功能研究
React Native移动框架功能研究 此篇只研究React Native框架的功能. 一.React Natvie是什么 React Native是使用React(或者说JS)来开发原生APP的框 ...
- PCWIFI--无线网络共享软件
前段时间由于需要共享笔记本无线网络给手机使用,在网上找了几个软件试了一下,没找到比较好用的,要么是收费的,要么有广告,要么附带一大堆其他功能,所以决定自己写一个小软件来实现该功能.软件相关介绍如下: ...
- Newtonsoft.Json中的时间格式详解.
Newtonsoft.json是一款不错的序列化反序列化第三方组件,具体如何使用属于基础知识,此处不再讲解.看以下代码: public class OutgameEntity { public str ...
- Aoite 系列(04) - 强劲的 CommandModel 开发模式(上篇)
Aoite 是一个适于任何 .Net Framework 4.0+ 项目的快速开发整体解决方案.Aoite.CommandModel 是一种开发模式,我把它成为"命令模型",这是一 ...
- 对map集合进行排序
今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单介绍Map ...
- 知方可补不足~Sqlserver中的几把锁和.net中的事务级别
回到目录 当数据表被事务锁定后,我们再进行select查询时,需要为with(锁选项)来查询信息,如果不加,select将会被阻塞,直到锁被释放,下面介绍几种SQL的锁选项 SQL的几把锁 NOLOC ...
- 基础才是重中之重~ConcurrentDictionary让你的多线程代码更优美
回到目录 ConcurrentDictionary是.net4.0推出的一套线程安全集合里的其中一个,和它一起被发行的还有ConcurrentStack,ConcurrentQueue等类型,它们的单 ...