利用Android手机里的摄像头进行拍照
1.在API Guides中找到Camera,里面讲解了如何使用系统自带的摄像头进行工作,之后我会试着翻译这部分的内容。
2.找到Camera类:有android.hardware.Camera和android.graphics.Camera两个类,我们这里使用android.hardware.Camera。
使用Camera类来拍照的步骤如下(API 原文):
- Obtain an instance of Camera from
open(int). - Get existing (default) settings with
getParameters(). - If necessary, modify the returned
Camera.Parametersobject
and callsetParameters(Camera.Parameters). - If desired, call
.setDisplayOrientation(int) - Important: Pass a fully initialized
SurfaceHoldertosetPreviewDisplay(SurfaceHolder).
Without a surface, the camera will be unable to start the preview. - Important: Call
startPreview()to
start updating the preview surface. Preview must be started before you can take a picture. - When you want, call
takePicture(Camera.ShutterCallback,to capture a photo. Wait for the callbacks to provide the actual image data.
Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback) - After taking a picture, preview display will have stopped. To take more photos, call
startPreview()again
first. - Call
stopPreview()to
stop updating the preview surface. - Important: Call
release()to
release the camera for use by other applications. Applications should release the camera immediately inonPause()(and
re-open()it inonResume()).
1.首先,我们调用Camera类的open(int)方法来获取一个实例,如果是要使用后置摄像头,直接调用open()方法即可,如果想打开指定的摄像头,可为这个方法传递一个int值的摄像头ID参数(cameraID),这个ID的值只能在0到getNumberOfCameras()-1之间,一般0代表后置,1代表前置。我们在调用这个方法时,如果摄像头已经被其他的应用打开,那么就会抛出RuntimeException()。需要注意的是,这个方法可能会使用很长时间才能够完成,所以我们最好开启一个新线程来防止UI线程卡死。Camera
camera = Camera.open(); //开启默认的后置摄像头
2.第二步,我们调用Camera类的getParameters()方法来获取拍照的参数,这个方法返回了一个Camera.Parameters对象。即Camera.Parameters parameters=camera.getParameters();
3.如果有必要的话,我们调用setParameters(Camera.Parameters params)来修改上面所返回的Camera.Parameters对象的拍照参数。设置的方法见Camera.Parameters类,常用的有:设置预览照片的大小setPreviewSize(int width,int height),设置预览照片时每秒显示多少帧的最小值和最大值setPreviewFpsRanges(int min,int max),fps指的是:每秒帧数(frames
per second);
4.如果有必要的话,我们可以调用 setDisplayOrientation(int
degrees)方法来设置预览照片的方向(顺时针的)。这个方法在肖像模式的应用中很有用,因为前置摄像头拍出来的照片就像是照镜子一样,左右是相反的,这时候就要改变预览的方向了。(这个之后自己做个实例对比)。
下面两步非常重要:
5.我们传一个已经初始化完的SurfaceHolder给setPreviewDisplay(SurfaceHolder),来设置使用哪一个SurfaceView来显示取景照片,如果没有这个SurfaceView,就无法预览。
6.然后我们调用startPreView()方法开始预览取景。然后就可以拍照了。
7.调用Camera的 takePicture(Camera.ShutterCallback
shutter, Camera.PictureCallback raw, Camera.PictureCallback postview, Camera.PictureCallback jpeg),参数如下:
| shutter | the callback for image capture moment, or null |
|---|---|
| raw | the callback for raw (uncompressed) image data, or null |
| postview | callback with postview image data, may be null |
| jpeg |
the callback for JPEG image data, or null |
8.当拍完一张照片之后,预览显示就会关掉。如果我们还想拍些照片,就需要重新调用startPreview();
9.结束程序时,要调用Camera的stopPreview()来结束取景预览。
10.重要:为了能让其他应用能够使用摄像头,我们要调用release()方法来释放摄像头。当Activity在onPause()的时候,释放掉;当onResume()的时候,重新打开。
利用Android手机里的摄像头进行拍照的更多相关文章
- Android手机里的垃圾文件和文件夹清理
SD卡中各个文件夹功能的最详尽分析SD卡用久了会有好多文件夹出现,大家看看都是干什么用~ 1..android_secure 是官方app2sd的产物,删了之后装到sd卡中的软件就无法使用了.2.. ...
- hbuilder在android手机里用chrome调试,只显示了设备名称,却没有inspect按钮
stark 通过“菜单”->“工具”->“检查设备”打开设备检查页面,只显示了设备名称,却没有inspect按钮,要怎么办 1 赞2014-10-09 22:00 ============ ...
- 在电脑上用chrome浏览器调试android手机里的网页代码时,无法看到本地加载的js文件
在需要调试的js文件最顶部加上代码就可以看到了: console.log('haha'); debugger;
- Delphi - 利用DLL编程控制摄像头实现拍照、录制视频
Delphi利用avicap32.dll编程控制摄像头实现拍照.录制视频 项目需求:平板电脑(Windows系统)一维/二维码扫描功能: 需求分析: 需要扫描一维/二维码时,分两步实现. 第一步,av ...
- Android手机如何通过USB共享网络给Mac?
最近网络挂了,mac不能上网查资料,心情非常毛躁,急切寻求用mac蹭WiFi的方法. 没有找到电脑端破解WiFi密码的软件,手头的Android手机没有root,也无法查看WiFi密码--->破 ...
- ORB-SLAM2 运行 —— ROS + Android 手机摄像头
转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12404730.html 本文要点: ROS 配置安装 解决 sud ...
- 部分Android手机拍照后照片被旋转的解决方案
在部分Android手机(如MT788.Note2)上,使用Camera拍照以后,得到的照片会被自动旋转(90°.180°.270°),这个情况很不符合预期.仔细分析了一下,因为照片属性中是存储了 ...
- 【Android测试】【随笔】在手机里用命令行创建中文文件夹
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4580319.html 不知道为啥当时自己写了一段在手机里用 ...
- 利用exif.js解决ios或Android手机上传竖拍照片旋转90度问题
html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非 ...
随机推荐
- global & nonlocal
name = "A" def test(): name = "B" def test2(): global name # global 指的是拿到的是全局的变量 ...
- apiCode/1/1.1/1.1.1
public abstract class myClass { private string id = ""; private string name = "" ...
- Js中获取frames中的元素
var oCombo = window.parent.frames["frmresourcetype"].document.getElementById('cmbType') ; ...
- Kafka学习记录
1 Kafka的基本介绍 Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.具有快速.可扩展.分布式.可复制等特点.Kafka与传 ...
- sql查找字符串是否包含字符
SELECT [Fgoodsid] ,[Fgoodsname] ,[Fcinema] ,[Fprice] FROM [tenpaytest].[dbo].[goodsinfo]where Fgoods ...
- jsp中使用动态数据进行mySQL数据库的两种操作方法
使用动态数据进行数据库内容的增删改查操作有两种方法: 在此定义数据库连接为conn 假设有表单进行数据输入并提交到处理页面一种是使用预编译格式: 其格式如下: String name = reques ...
- uva 11324 The Largest Clique(强连通分量缩点+DAG动态规划)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=25&page=sh ...
- Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)
Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt) 作者: Desmond Chen,发布日期: 2014-05- ...
- UVA 253 (13.08.06)
Cube painting We have a machine for painting cubes. It is supplied withthree different colors: blu ...
- thinkphp关联查询
$list=$model->table("$dName d ,$mName m,$cName c") ->field('d.*,m.title as musicTitl ...