Android 照相机的实例应用
Android照相机的实例应用
关键技术:
SurfaceHolder.Callback
publicclassMyCameraDemoextendsActivity{ privateSurfaceViewsurface=null; privateButtonbut=null; privateSurfaceHolderholder=null; privateCameracam=null; privatebooleanpreviewRunning=true; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); super.setContentView(R.layout.main); this.but=(Button)super.findViewById(R.id.but); this.surface=(SurfaceView)super.findViewById(R.id.surface); this.holder=this.surface.getHolder(); this.holder.addCallback(newMySurfaceViewCallback()); //设置缓冲类型 this.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); //设置分辨率 this.holder.setFixedSize(600,350); this.but.setOnClickListener(newOnClickListenerImpl()); } privateclassOnClickListenerImplimplementsOnClickListener{ @Override publicvoidonClick(Viewv){ if(MyCameraDemo.this.cam!=null){ //自动对焦 MyCameraDemo.this.cam.autoFocus(newAutoFocusCallbackImpl()); } } } privateclassMySurfaceViewCallbackimplementsSurfaceHolder.Callback{ //当预览界面格式大小改变时,调用 publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth, intheight){ } //初次实例化界面调用 publicvoidsurfaceCreated(SurfaceHolderholder){ MyCameraDemo.this.cam=Camera.open(0);//取得第一个摄像头 //窗口服务 WindowManagermanager=(WindowManager)MyCameraDemo.this .getSystemService(Context.WINDOW_SERVICE); //取得display显示对象 Displaydisplay=manager.getDefaultDisplay(); //照相机参数 Parametersparam=MyCameraDemo.this.cam.getParameters(); //将照相机预览大小设置为display大小 param.setPreviewSize(display.getWidth(),display.getHeight()); param.setPreviewFrameRate(5);//一秒5帧 param.setPictureFormat(PixelFormat.JPEG);//图片形式 param.set("jpen-quality",80);//图片质量,最高100 MyCameraDemo.this.cam.setParameters(param); try{ MyCameraDemo.this.cam.setPreviewDisplay(MyCameraDemo.this.holder); }catch(IOExceptione){ } MyCameraDemo.this.cam.startPreview();//进行预览 MyCameraDemo.this.previewRunning=true;//已经开始预览 } @Override publicvoidsurfaceDestroyed(SurfaceHolderholder){ if(MyCameraDemo.this.cam!=null){ if(MyCameraDemo.this.previewRunning){ MyCameraDemo.this.cam.stopPreview();//停止预览 MyCameraDemo.this.previewRunning=false; } MyCameraDemo.this.cam.release(); } } } privateclassAutoFocusCallbackImplimplementsAutoFocusCallback{ @Override publicvoidonAutoFocus(booleansuccess,Cameracamera){ if(success){//成功 MyCameraDemo.this.cam.takePicture(sc,pc,jpgcall); } } } privatePictureCallbackjpgcall=newPictureCallback(){ @Override publicvoidonPictureTaken(byte[]data,Cameracamera){//保存图片的操作 Bitmapbmp=BitmapFactory.decodeByteArray(data,0,data.length); StringfileName=Environment.getExternalStorageDirectory() .toString() +File.separator +"mldnphoto" +File.separator +"MLDN_"+System.currentTimeMillis()+".jpg"; Filefile=newFile(fileName); if(!file.getParentFile().exists()){ file.getParentFile().mkdirs();//创建文件夹 } try{ BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream(file)); bmp.compress(Bitmap.CompressFormat.JPEG,80,bos);//向缓冲区之中压缩图片 bos.flush(); bos.close(); Toast.makeText(MyCameraDemo.this, "拍照成功,照片已保存在"+fileName+"文件之中!",Toast.LENGTH_SHORT) .show(); }catch(Exceptione){ Toast.makeText(MyCameraDemo.this, "拍照失败!",Toast.LENGTH_SHORT) .show(); } MyCameraDemo.this.cam.stopPreview(); MyCameraDemo.this.cam.startPreview(); } }; privateShutterCallbacksc=newShutterCallback(){ @Override publicvoidonShutter(){ //按下快门之后进行的操作 } }; privatePictureCallbackpc=newPictureCallback(){ @Override publicvoidonPictureTaken(byte[]data,Cameracamera){ } }; }
主布局函数
以上就是Android相机的使用方法,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!