- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
android 拍照和摄像流程
拍照流程上面简单介绍了下准备工作,下面结合拍照过程中的需要用到的API对拍照流程做下简单描述1、在Activity的OnCreate函数中设置好SurfaceView,包括设置SurfaceHolder.Callback对象和SurfaceHolder对象的类型,具体如下SurfaceViewmpreview = (SurfaceView) this.findViewById(R.id.camera_preview);SurfaceHoldermSurfaceHolder = mpreview.getHolder();mSurfaceHolder.addCallback(this);mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);2、在SurfaceHolder.Callback的surfaceCreated函数中,使用Camera的Open函数开机摄像头硬件,这个API在SDK 2.3之前,是没有参数的,2.3以后支持多摄像头,所以开启前可以通过getNumberOfCameras先获取摄像头数目,再通过getCameraInfo得到需要开启的摄像头id,然后传入Open函数开启摄像头,假如摄像头开启成功则返回一个Camera对象,否则就抛出异常;3、开启成功的情况下,在SurfaceHolder.Callback的surfaceChanged函数中调用getParameters函数得到已打开的摄像头的配置参数Parameters对象,如果有需要就修改对象的参数,然后调用setParameters函数设置进去(SDK2.2以后,还可以通过Camera::setDisplayOrientation设置方向);4、同样在surfaceChanged函数中,通过Camera::setPreviewDisplay为摄像头设置SurfaceHolder对象,设置成功后调用Camera::startPreview函数开启预览功能,上面3,4两步的代码可以如下所示public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){//已经获得Surface的width和height,设置Camera的参数Camera.Parameters parameters = camera.getParameters();parameters.setPreviewSize(w, h);ListSize vSizeList = parameters.getSupportedPictureSizes();for(intnum = 0; num vSizeList.size(); num++){Size vSize = vSizeList.get(num);}if(this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE){//如果是竖屏parameters.set(orientation, portrait);//在2.2以上可以使用//camera.setDisplayOrientation(90);}else{parameters.set(orientation, landscape);//在2.2以上可以使用//camera.setDisplayOrientation(0);}camera.setParameters(parameters);try {//设置显示camera.setPreviewDisplay(holder);} catch (IOException exception) {camera.release();camera = null;}//开始预览camera.startPreview();}5、假设要支持自动对焦功能,则在需要的情况下,或者在上述surfaceChanged调用完startPreview函数后,可以调用Camera::autoFocus函数来设置自动对焦回调函数,该步是可选操作,有些设备可能不支持,可以通过Camera::getFocusMode函数查询。代码可以参考如下:// 自动对焦camera.autoFocus(new AutoFocusCallback(){@Overridepublic void onAutoFocus(boolean success, Camera camera){if (success){// success为true表示对焦成功,改变对焦状态图像ivFocus.setImageResource(R
文档评论(0)