版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android开发实战经典第10章:多媒体技术 使用摄像头拍照北京魔乐科技软件学院李兴华研发部本章目标使用SurfaceView显示捕获图象;使用Camera类进行照片的拍照。E-MAIL:使用摄像头拍照使用SurfaceView组件可以进行视频文件的播放,而同样可以继续利用SurfaceView实现拍照的浏览功能,在支持拍照的手机上,都会为用户提供一个预览的屏幕显示当前摄像头所采集到的图片,而这种功能可以利用SurfaceView实现,SurfaceView之中的操作核心就是在于android.view.SurfaceHolder对象的操作,在上一节之中,只是通过S
2、urfaceView取得了一个SurfaceHolder对象进行操作,可是如果要想实现拍照的功能,首先用户必须手工实现android.view.SurfaceHolder.Callback这个操作接口,在此接口中定义了高速图象浏览时的各个操作。E-MAIL:SurfaceHolder.Callback接口中定义的方法E-MAIL:No.方法类型描述1public abstract void surfaceChanged (SurfaceHolder holder, int format, int width, intheight)普通当预览界
3、面的格式和大小发生改变时会触发此操作2public abstract void surfaceCreated(SurfaceHolderholder)普通当预览界面被创建时会触发此操作3public abstract voidsurfaceDestroyed(SurfaceHolder holder)普通当预览界面关闭时会触发此操作Camera类除了拍照的预览界面之外的重要组成组件就是进行调用摄像头的操作类android.hardware.Camera,此类主要负责完成拍照图片的参数设置及保 存。E-MAIL:Camera类的常用操作方法E-MAIL:mldnqa16
4、3.comNo.方法类型描述1public final void autoFocus (Camera.AutoFocusCallback cb)普通自动对焦2public final void cancelAutoFocus()普通取消自动对焦3public static int getNumberOfCameras()普通得到摄像头的个数4public Camera.Parameters getParameters()普通得到摄像头的各个参数5public final void lock()普通锁定设备6public static Camera open(int cameraId)普通打开指
5、定的摄像头,以获得Camera对象7public static Camera open()普通打开默认的摄像头8public final void reconnect()普通重新连接摄像头9public final void release()普通释放摄像头资源10public void setParameters(Camera.Parameters params)普通设置摄像头的若干参数11public final void startPreview()普通开始预览12public final void stopPreview()普通停止预览13public final void takeP
6、icture(Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback jpeg)普通捕获图象14public final void unlock()普通设备解除锁定15public final void setZoomChangeListener (Camera.OnZoomChangeListenerlistener)普通显示区域发生改变时触发16public final void setDisplayOrientation(int degrees)普通设置摄像头角度Camera类中
7、定义的内部接口E-MAIL:No.接口名称描述1android.hardware.Camera.AutoFocusCallback自动对焦的回调操作2android.hardware.Camera.ErrorCallback错误出现时的回调操作3android.hardware.Camera.OnZoomChangeListener显示区域改变时的回调操作4android.hardware.Camera.PictureCallback图片生成时的回调操作5android.hardware.Camera.PreviewCallback预览时的回调操作6android.h
8、ardware.Camera.ShutterCallback按下快门后的回调操作范例:定义布局管理器 main.xmlE-MAIL:布局管理器高度为屏幕高度默认显示文字组件高度为自身高度范例:定义SurfaceViewCallback接口子类:/ 接口SurfaceHolder.Callback被用来接收摄像头预览界面变化的信息。private class MySurfaceViewCallback implements SurfaceHolder.Callback public void surfaceChanged(SurfaceHold
9、er holder, int format, int width,int height) / 当预览界面的格式和大小发生改变时,该方法被调用public void surfaceCreated(SurfaceHolder holder) / 初次实例化预览界面调用MyCameraDemo.this.cam = Camera.open(0); / 取得摄像头WindowManager manager = (WindowManager) MyCameraDemo.this.getSystemService(Context.WINDOW_SERVICE); / 取得窗口服务Display displ
10、ay = manager.getDefaultDisplay(); / 取得Display对象Parameters param = MyCameraDemo.this.cam.getParameters(); / 取得照相机参数param.setPreviewSize(display.getWidth(), display.getHeight();/ 设置预览大小param.setPreviewFrameRate(5);/ 每秒显示5帧的数据param.setPictureFormat(PixelFormat.JPEG); / 设置图片格式param.set(jpeg-quality, 85)
11、; / 设置图片质量,最高为100 MyCameraDemo.this.cam.setParameters(param);/ 设置参数try / 通过SurfaceView显示MyCameraDemo.this.cam.setPreviewDisplay(MyCameraDemo.this.holder); catch (IOException e) e.printStackTrace();MyCameraDemo.this.cam.startPreview();/ 开始预览MyCameraDemo.this.previewRunning = true; / 修改预览标记public void
12、 surfaceDestroyed(SurfaceHolder holder) / 当预览界面被关闭时方法被调用if (MyCameraDemo.this.cam != null) if (MyCameraDemo.this.previewRunning) / 如果正在预览MyCameraDemo.this.cam.stopPreview();/ 停止预览MyCameraDemo.this.previewRunning = false; / 修改标记/ 摄像头只能被一个Activity程序使用,所以要释放设像头。MyCameraDemo.this.cam.release(); / 释放摄像头E
13、-MAIL范例:定义PictureCallback子类E-MAIL:private PictureCallback jpgcall = new PictureCallback() public void onPictureTaken(byte data, Camera camera) try Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);/ 定义BitMap String fileName = Environment.getExternalStorageDirectory().toSt
14、ring()+ File.separator+ mldnphoto+ File.separator+ MLDN_+ System.currentTimeMillis()+ .jpg;/ 输出文件名称File file = new File(fileName);/ 定义File对象if (!file.getParentFile().exists() / 父文件夹不存在file.getParentFile().mkdirs(); / 创建父文件夹BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file
15、);/ 使用字节缓存流press(Bitmap.CompressFormat.JPEG, 80, bos);/ 图片压缩bos.flush(); / 清空缓冲bos.close();/ 关闭Toast.makeText(MyCameraDemo.this,拍照成功,照片已保存在 + fileName + 文件之中, Toast.LENGTH_SHORT).show();/ 显示ToastMyCameraDemo.this.cam.stopPreview();/ 停止预览MyCameraDemo.this.cam.startPreview();/ 开始预览 catch (Excep
16、tion e) ;范例:设置显示参数E-MAIL:Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); super.requestWindowFeature(Window.FEATURE_NO_TITLE);/ 不显示标题super.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREE
17、N);/ 全屏显示super.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); / 高亮显示super.setContentView(R.layout.main);/ 布局管理器this.but = (Button) super.findViewById(R.id.but);/ 取得组件this.surface = (SurfaceView) findViewById(R.id.surface);/ 取得组件this.holder = surface.getHolder();/ 设 置 Holder this.holder.addCallback(new MySurfaceViewCallback();/ 加入回调this.holder.setType(SurfaceHold
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年高级社会工作师考试(综合能力)试题及答案
- 2026年传染病管理培训试题含答案
- 某水泥厂破碎管理准则
- 某重型机厂装配操作办法
- 某电子厂人力资源管理办法
- 初中八年级物理跨学科实践:变速运动平均速度测量进阶实验导学案
- 小学数学六年级下册《比例尺的应用(第2课时)》创新教学设计
- 初中信息科技七年级上册《走进互联世界》核心知识清单
- 初中英语八年级上册 Unit 1 Friends (Main Task) 导学案
- 小学信息科技五年级上册《声影同频:我的交互式音乐绘本》项目式学习教学设计
- T-DXJSXH 0003-2023 装配整体式混凝土剪力墙结构工程施工及质量验收标准
- 班主任德育工作:班主任培训ppt课件(新)
- 单句与复句区别之超详解
- 新版钢结构吊装专项方案
- 220海缆监理细则
- 英语感叹句用法及练习题
- 各校神外考博试题整理版
- 卡式16种人格因素测验试题+详细评分标准详
- 胸腔闭式引流 课件
- 专家花篮拉杆悬挑脚手架专项施工方案
- 机械原理课程设计说明书
评论
0/150
提交评论