Android 照相机.docx
- 文档编号:20117839
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:9
- 大小:16.94KB
Android 照相机.docx
《Android 照相机.docx》由会员分享,可在线阅读,更多相关《Android 照相机.docx(9页珍藏版)》请在冰豆网上搜索。
Android照相机
Android照相机
一.Android照相机原理
Goolgle从AndroidOS2.0版本开始提供照相API功能,
可以开发控制照相功能;更在AndroidOS2.3版本支持多个相机功能,让相机应用程序可以选择和配置相机。
1.信息配置文件AndroidManifest.xml中添加权限和功能
name=”android.permission.CAMERA”/> name=”android.hardware.camera”/> name=”android.hardware.autofocus”/> name=”android.hardware.flash”/> Android照相机是横向显示的,因此照片的属性必须要配置成”landscape”。 label=”@string/app_name”android: screenOrientation=”landscape”android: name=”.MainActivity”> 2.相机应用程序拍摄的步骤 相机类提供图像的捕捉启动预览停止预览拍摄照片检索视频编码。 1)采用open()方法获得相机实例。 2)获取与getParameters()相关的配置项目 3)如果有必要的话,可以重新配置相机特性参数,修改返回的Camera.Parameters对象,并调用setParameters(Camera.Parameters). 4)如果要改回显示方向的话,则调用setDisplayOrentation(int) 5)传递完全初始化的SurfaceHoloer给setPreviewDisplay (SurfaceHolder)。 如果没有一个表面景象surface的话,相机将无法启动预览。 6)调用startPreview()来开始更新预览表面景象surface。 在可以拍摄一张照片之前,就必须是已经可以开始预览。 7)当你决定要拍摄这一张照片时,调用takePicture(Camera. ShutterCallbackshutter,Camera.PictureCallbackraw,Camera. PictureCallbackpostview,Camera.PictureCallbackjpeg)。 捕获一张照片,然后等待处理的回调,取得实际图像数据。 8)拍摄一张照片后,预览显示就已经停止了。 需要拍摄更多张照片时,再次调用startPreview(). 9)调用stopPreview()来停止更新预览表面景象surface 10)调用release()来释放相机,应用程序应立即在oPause()阶段释放相机,如果想要重新获取相机的实例,要做onResume()中调用reaOpen()方法。 二.设计一款照相机软件 1.相机所拍摄的影像的预览(Preview) 2.相机自动焦距和拍摄照片(AutoFoucus) 3.配置相机特性的参数(Parameters) 4.贴图在拍摄的影响上(Overlay) 代码: 部分 a)CameraManifest.xml文件 name="android.permission.CAMERA"/> name="android.hardware.camera"/> name="android.hardware.autofocus"/> name="android.hardware.flash"/> android: icon="@drawable/ic_launcher" android: label="@string/app_name"> android: name=".CameraActivity" android: label="@string/app_name"android: screenOrientation="landscape"> name="android.intent.action.MAIN"/> name="android.intent.category.LAUNCHER"/> b)res/layout/main.xml文件 xmlversion="1.0"encoding="utf-8"? > android=" android: layout_width="fill_parent" android: layout_height="fill_parent" android: orientation="vertical"> android: id="@+id/mSurfaceView" android: layout_width="fill_parent" android: layout_height="fill_parent"/> android: id="@+id/linearLayout0" android: layout_width="wrap_content" android: layout_height="fill_parent" android: layout_alignParentRight="true" android: gravity="center_vertical" android: orientation="vertical"> c)com.camera.app.CameraActivity importjava.io.IOException; importandroid.app.Activity; //要注意该类的导入,一定是hardware importandroid.hardware.Camera; importandroid.os.Bundle; importandroid.view.SurfaceHolder; importandroid.view.SurfaceView; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.view.Window; importandroid.view.WindowManager; importandroid.widget.Button; publicclassCameraActivityextendsActivityimplementsSurfaceHolder.Callback,OnClickListener{ privateSurfaceViewmSurfaceView; privateSurfaceHoldermSurfaceHolder; privateCameracamera; privateButtonmButton_paizhao; privateButtonmButton_save; privateButtonmButton_cencel; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); init(); } publicvoidinit(){ //实例化控件对象 mSurfaceView=(SurfaceView)findViewById(R.id.mSurfaceView); mButton_paizhao=(Button)findViewById(R.id.mButton_paizhao); mButton_save=(Button)findViewById(R.id.mButton_save); mButton_cencel=(Button)findViewById(R.id.mButton_cancel); mButton_paizhao.setOnClickListener(this); mButton_save.setOnClickListener(this); mButton_cencel.setOnClickListener(this); //调用getHolder()获取一个SurfaceHolder对象 mSurfaceHolder=mSurfaceView.getHolder(); mSurfaceHolder.addCallback(this); //设置的类型是并不拥有缓存区的表面景象 mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } @Override publicvoidsurfaceCreated(SurfaceHolderholder){ camera=Camera.open(); try{ camera.setPreviewDisplay(holder); }catch(IOExceptione){ e.printStackTrace(); } } @Override publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth, intheight){ camera.stopPreview(); camera.startPreview(); } @Override publicvoidsurfaceDestroyed(SurfaceHolderholder){ camera.stopPreview(); camera.release(); } Camera.ShutterCallbackshutter=newCamera.ShutterCallback(){ @Override publicvoidonShutter(){ //TODOAuto-generatedmethodstub } }; Camera.AutoFocusCallbackautoFocus=newCamera.AutoFocusCallback(){ @Override publicvoidonAutoFocus(booleansuccess,Cameracamera){ //TODOAuto-generatedmethodstub } }; Camera.PictureCallbackjpeg=newCamera.PictureCallback(){ @Override publicvoidonPictureTaken(byte[]data,Cameracamera){ //TODOAuto-generatedmethodstub } }; @Override publicvoidonClick(Viewv){ switch(v.getId()){ caseR.id.mButton_paizhao: camera.autoFocus(autoFocus); try{ Thread.sleep(2*1000); }catch(Exceptione){ e.printStackTrace(); } camera.takePicture(shutter,null,jpeg); break; caseR.id.mButton_save: break; caseR.id.mButton_cancel: camera.startPreview(); break; } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 照相机