




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于android平台的相机调用的研究与应用申洪健,肖凯山东建筑大学左岸团队 济南 252301摘要Google于2007年11月5日宣布的基于Linux平台的android系统-首个为移动终端打造的真正开放和完整的移动软件。Android出身豪门,并以其完美的开放性获得了众多开发人员的青睐。在多媒体应用非常普及的今天,很多应用软件需要完成对手机内置相机的调用来实现软件的功能,在我们的左岸易记个人记账软件的储蓄罐模块中也需要实现调用手机内置摄像头的功能,本文正是在我们开发软件的基础上,对于android开发平台上对相机调用的一些认识和见解。内容主要有相机的调用、预览设置、图片设置及传输,并附上源码以供参考。关键词 android;camera 正文android平台由操作系统、中间件、用户界面和应用软件组成。它采用软件堆层的架构,主要分为三部分。底层以Linux内核工作为基础,由C语言开发,只提供基本功能;中间层包括函数库Library和虚拟机Virtual Machine,由C+开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java作为编写程序的一部分。android提供了操作摄像头的API,可以通过两种做法来使用:通过Intent直接调用系统提供的照相机功能,复用它的拍照Activity,这是最简单和最方便的办法,因为你不需要考虑手机的兼容性问题,比如预览拍照图片大小等;Intent intent = new Intent();Intent.setAction(“android.media.action.STILL_IMAGE_CAMERA”);startActivity(intent);默认情况下,如果在intent中不做设置,也就是不写这部分:intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), camera.jpg);那么当从照相机Activity返回的时候,会带一个名为data的Bitmap对象。是照片的缩略图(这也是为什么有些照片会比较小的原因)。如果写上面的代码,则不会返回名为data的对象。但是会按照指定的路径保存原始图片。直接调用摄像头的API,自己编写类似取景框的Activity,这样灵活度更大,缺点是你需要考虑比较底层的东西。要知道android有多个版本,摄像头的分辨率也不一样,需要先获取当前相机的分辨率组合,然后再编写各种屏幕分辨率组合的布局。以下是具体的代码解析:import java.io.IOException;import android.app.Activity;import android.content.Context;import android.graphics.PixelFormat;import android.hardware.Camera;import android.hardware.Camera.AutoFocusCallback;import android.hardware.Camera.PictureCallback;import android.os.Bundle;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.Window;import android.view.ViewGroup.LayoutParams;import android.widget.ImageView;import android.widget.ImageView.ScaleType;public class CameraPreview extends Activityprivate Preview preview;private ImageView ivFocus;public void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);preview = new Preview(this);setContentView(preview);ivFocus = new ImageView(this);public boolean onTouchEvent(MotionEvent event)if (event.getAction() = MotionEvent.ACTION_DOWN)preview.takePicture();return super.onTouchEvent(event);public boolean onKeyDown(int keyCode, KeyEvent event)if(keyCode = KeyEvent.KEYCODE_DPAD_CENTER)preview.takePicture();return super.onKeyDown(keyCode, event);class Preview extends SurfaceView implements SurfaceHolder.Callbackprivate SurfaceHolder holder;private Camera camera;/ 创建一个PictureCallback对象,并实现其中的onPictureTaken方法private PictureCallback pictureCallback = new PictureCallback()/ 该方法用于处理拍摄后的照片数据Overridepublic void onPictureTaken(byte data, Camera camera)/ data就是照片数据getIntent().putExtra(bytes, data);/resultCode 设为20setResult(20, getIntent();/ 停止照片拍摄camera.stopPreview();camera = null;/ 关闭当前的Activityfinish();public Preview(Context context)super(context);holder = this.getHolder();/ 指定用于捕捉拍照事件的SurfaceHolder.Callback对象holder.addCallback(this);/ 设置SurfaceHolder对象的类型holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);/ 开始拍照时调用该方法public void surfaceCreated(SurfaceHolder holder)camera = Camera.open();trycamera.setPreviewDisplay(holder);catch (IOException exception)/ 释放手机摄像头camera.release();camera = null;/ 停止拍照时调用该方法public void surfaceDestroyed(SurfaceHolder holder)/ 释放手机摄像头camera.stopPreview();camera.release();camera = null;/ 拍照状态变化时调用该方法public void surfaceChanged(final SurfaceHolder holder, int format, int w, int h)tryCamera.Parameters parameters = camera.getParameters();/ 设置照片格式parameters.setPictureFormat(PixelFormat.JPEG);/ 根据屏幕方向设置预浏尺寸/if (getWindowManager().getDefaultDisplay().getOrientation() = 0)/parameters.setPreviewSize(h, w);/elseparameters.setPreviewSize(w, h);/ 设置拍摄照片的实际分辨率,在本例中的分辨率是1024*768/parameters.setPictureSize(1024, 768);/ 设置保存的图像大小camera.setParameters(parameters);/ 开始拍照camera.startPreview();/ 准备用于表示对焦状态的图像(对焦符号)ivFocus.setImageResource(R.drawable.icon);LayoutParams layoutParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);ivFocus.setScaleType(ScaleType.CENTER);addContentView(ivFocus, layoutParams);ivFocus.setVisibility(VISIBLE);/ 自动对焦camera.autoFocus(new AutoFocusCallback()public void onAutoFocus(boolean success, Camera camera)if (success)/ 对焦成功,改变状态图像ivFocus.setImageResource(R.drawable.camera););catch (Exception e)/ 停止拍照,并将拍摄的照片传入PictureCallback接口的onPictureTaken方法public void takePicture()if (camera != null)camera.takePicture(null, null, pictureCal
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广西百色市田阳区民政局、共青团百色市田阳区委员会城镇公益性岗位工作人员招聘2人考前自测高频考点模拟试题及答案详解(全优)
- 2025吉林长春市吉林大学白求恩第一医院高压氧科招聘考前自测高频考点模拟试题及答案详解(必刷)
- 2025年中国化妆品袋膜行业市场分析及投资价值评估前景预测报告
- 2025年中国花园耕作机行业市场分析及投资价值评估前景预测报告
- 2025广东省中医院贵州医院第十三届贵州人才博览会引才19人模拟试卷及答案详解(各地真题)
- 2025广西防城港市总工会招聘编外工作人员1人模拟试卷及参考答案详解一套
- 2025广东连平县田源镇人民政府应急救援中队队员招聘1人模拟试卷及答案详解参考
- 2025甘肃兰州中核五〇四医院招聘护理员考前自测高频考点模拟试题及1套完整答案详解
- 2025江苏海晟控股集团有限公司下属子公司招聘高级管理人员人员考前自测高频考点模拟试题及答案详解(历年真题)
- 2025年临沂市商业学校公开招聘教师(18名)考前自测高频考点模拟试题及1套参考答案详解
- 橡胶制品生产工(橡胶硫化工)安全技术操作规程
- 成分制备情况介绍
- 绿色化学技术在精细化工中的应用研究
- 项目管理课件培训
- 女性私密健康与护理课程
- 2025至2030中国游戏陪玩行业市场发展分析及发展前景与投资报告
- 临床重点专科管理制度
- 交通事故和解协议范本
- 模具超寿命管理制度
- TSG D7004-2010 压力管道定期检验规则 -公用管道
- 2025既有办公建筑体检评价标准
评论
0/150
提交评论