




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编程实现谷歌Android摄像头拍照【内容导航】 第1页:设定摄像头布局 第2页:摄像头实现代码 目前的智能手机拥有很多强大的功能,例如摄像头、GPS和无线上网等,现在是我们开始充分使用这些功能的时候了,在本篇文章中我们一起学习,如何在谷歌Android编程环境中,以最简单的方式实现谷歌Android摄像头拍照。在本文示例中,我们需要用到两个文件:布局文件和Activity文件。小提示数日前,Android 1.5(代号cupcake)新版发布,在安全方面有诸多改进,其中之一与摄像头权限控制有关。在此之前,你能够创建无需用户许可就可实现拍照的应用。现在该问题已被修复,如果你想在自己的应用中使用摄像头,需要在AndroidManifest.xml中增加以下代码:uses-permission android:name=android.permission.CAMERA/设定摄像头布局这是开发工作的基础,也就是说我们希望在应用程序中增加多少辅助性元素,如摄像头各种功能按钮等。在本文中我们采取最简方式,除了拍照外,没有多余摄像头功能。下面我们一起看一下本文示例将要用到的布局文件“camera_surface.xml”。LinearLayout xmlns:android=/apk/res/androidandroid:layout_width=fill_parent android:layout_height=fill_parent android:orientation=vertical SurfaceView android:id=+id/surface_camera android:layout_width=fill_parent android:layout_height=10dip android:layout_weight=1SurfaceViewLinearLayout小提示:记住不要在资源文件名称中使用大写字母,如果你把该文件命名为“CameraSurface.xml”,会给你带来不必要的麻烦。该布局非常简单,只有一个LinearLayout视图组,在它下面只有一个SurfaceView视图,也就是我们的摄像头屏幕。 page 【内容导航】 第1页:设定摄像头布局 第2页:摄像头实现代码 摄像头实现代码现在我们已经查看了摄像头的xml代码,下面再来看一下Android代码。让我们创建一个名为“CameraView”的Activity类,实现SurfaceHolder.Callback接口:public class CamaraView extends Activity implements SurfaceHolder.Callback接口SurfaceHolder.Callback被用来接收摄像头预览界面变化的信息。它实现了三个方法:surfaceChanged当预览界面的格式和大小发生改变时,该方法被调用。surfaceCreated初次实例化,预览界面被创建时,该方法被调用。surfaceDestroyed当预览界面被关闭时,该方法被调用。下面我们一起看一下在摄像头应用中如何使用这个接口,首先看一下在Activity类中的onCreate方法。super.onCreate(icicle);getWindow().setFormat(PixelFormat.TRANSLUCENT);requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(R.layout.camera);mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);mSurfaceHolder = mSurfaceView.getHolder();mSurfaceHolder.addCallback(this);mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);下面我们逐一对代码进行一下说明。getWindow().setFormat(PixelFormat.TRANSLUCENT);requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);通过上述代码,我们告诉屏幕两点信息:1、摄像头预览界面将通过全屏显示,没有“标题(title)”2、屏幕格式为“半透明”。setContentView(R.layout.camera_surface );mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);在以上代码中,我们通过setContentView来设定Activity的布局为前面我们创建的camera_surface,并创建一个SurfaceView对象,从xml文件中获得它。mSurfaceHolder = mSurfaceView.getHolder();mSurfaceHolder.addCallback(this);mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);通过以上代码,我们从surfaceview中获得了holder,并增加callback功能到“this”。这意味着我们的操作(activity)将可以管理这个surfaceview。我们看一下callback功能时如何实现的:public void surfaceCreated(SurfaceHolder holder) mCamera = Camera.open();mCamera是“Camera”类的一个对象。在surfaceCreated方法中我们“打开”摄像头。这就是启动它的方式。public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) if (mPreviewRunning) mCamera.stopPreview();Camera.Parameters p = mCamera.getParameters();p.setPreviewSize(w, h);mCamera.setParameters(p);try mCamera.setPreviewDisplay(holder); catch (IOException e) e.printStackTrace();mCamera.startPreview();mPreviewRunning = true;该方法让摄像头做好拍照准备,设定它的参数,并开始在Android屏幕中启动预览画面。我使用了一个“semaphore”参数来防止冲突:当mPreviewRunning为true时,意味着摄像头处于激活状态,并未被关闭,因此我们可以使用它。public void surfaceDestroyed(SurfaceHolder holder) mCamera.stopPreview();mPreviewRunning = false;mCamera.release();通过这个方法,我们停止摄像头,并释放相关的资源。正如大家所看到的,我们在这儿设置mPreviewRunning为false,以此来防止在surfaceChanged方法中的冲突。原因何在?因为这意味着我们已经关闭了摄像头,而且我们不能再设置其参数或在摄像头中启动图像预览。最后我们看一下本例中最重要的方法:Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() public void onPictureTaken(byte imageData, Camera c) ;当拍照时,该方法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广安职业技术学院《影像艺术创作》2023-2024学年第二学期期末试卷
- 骨骼健康补充剂企业制定与实施新质生产力项目商业计划书
- 人工智能工程师课程企业制定与实施新质生产力项目商业计划书
- 鲨鱼软骨素关节保养品行业深度调研及发展项目商业计划书
- 胃肠保护中药注射液行业深度调研及发展项目商业计划书
- 青岛大学《能源与动力测试技术》2023-2024学年第二学期期末试卷
- 会所楼层管理制度
- 会计基本管理制度
- 会计职场管理制度
- 攀枝花学院《作物生物信息学及应用》2023-2024学年第二学期期末试卷
- 2025年四川省凉山州中考数学试卷真题及解析答案
- 2025年上半年山东铁投集团校园招聘社会公开招聘165人笔试参考题库附带答案详解
- 2025年江苏省金陵中学英语八下期末学业质量监测试题含答案
- DB31-T 1545-2025 卫生健康数据分类分级要求
- 【薪智】2025地产建筑业行业白皮书人力核心指标行业报告系列
- 监护证考试试题及答案
- 2022石油化工消防设施维护保养技术标准
- 建办质202463号危险性较大的分部分项工程专项施工方案严重缺陷清单宣贯(雄安)
- 设备电气接线规范
- 生理学全套课件
- 三会两制一课记录表
评论
0/150
提交评论