相机拍摄

来源:互联网 发布:c语言学生成绩录入 编辑:程序博客网 时间:2024/04/28 10:26
publicclassCameraAndroidextendsActivity{privateCameraPreviewpreview;privateCameracamera;privateToneGeneratortone;privatestaticfinalintOPTION_SNAPSHOT=0;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);preview=newCameraPreview(this);setContentView(preview);}@OverridepublicbooleanonOptionsItemSelected(MenuItemitem){intitemId=item.getItemId();switch(itemId){caseOPTION_SNAPSHOT://拍摄照片camera.takePicture(shutterCallback,null,jpegCallback);break;}returntrue;}//返回照片的JPEG格式的数据privatePictureCallbackjpegCallback=newPictureCallback(){publicvoidonPictureTaken(byte[]data,Cameracamera){Parametersps=camera.getParameters();if(ps.getPictureFormat()==PixelFormat.JPEG){//存储拍照获得的图片Stringpath=save(data);//将图片交给Image程序处理Uriuri=Uri.fromFile(newFile(path));Intentintent=newIntent();intent.setAction("android.intent.action.VIEW");intent.setDataAndType(uri,"image/jpeg");startActivity(intent);}}};//快门按下的时候onShutter()被回调privateShutterCallbackshutterCallback=newShutterCallback(){publicvoidonShutter(){if(tone==null)//发出提示用户的声音tone=newToneGenerator(AudioManager.STREAM_MUSIC,ToneGenerator.MAX_VOLUME);tone.startTone(ToneGenerator.TONE_PROP_BEEP2);}};privateStringsave(byte[]data){Stringpath="/sdcard/"+System.currentTimeMillis()+".jpg";try{//判断SD卡上是否有足够的空间Stringstorage=Environment.getExternalStorageDirectory().toString();StatFsfs=newStatFs(storage);longavailable=fs.getAvailableBlocks()*fs.getBlockSize();if(available<data.length){//空间不足直接返回空returnnull;}Filefile=newFile(path);if(!file.exists())//创建文件file.createNewFile();FileOutputStreamfos=newFileOutputStream(file);fos.write(data);fos.close();}catch(Exceptione){e.printStackTrace();returnnull;}returnpath;}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){menu.add(0,OPTION_SNAPSHOT,0,R.string.snapshot);returnsuper.onCreateOptionsMenu(menu);}classCameraPreviewextendsSurfaceViewimplementsSurfaceHolder.Callback{SurfaceHoldermHolder;publicCameraPreview(Contextcontext){super(context);mHolder=getHolder();mHolder.addCallback(this);mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);}//Sureface创建的时候,此方法被调用publicvoidsurfaceCreated(SurfaceHolderholder){//打开摄像头,获得Camera对象camera=Camera.open();try{//设置显示camera.setPreviewDisplay(holder);}catch(IOExceptionexception){camera.release();camera=null;}}//Surface销毁的时候,此方法被调用publicvoidsurfaceDestroyed(SurfaceHolderholder){camera.stopPreview();//释放Cameracamera.release();camera=null;}publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intw,inth){//已经获得Surface的width和height,设置Camera的参数Camera.Parametersparameters=camera.getParameters();parameters.setPreviewSize(w,h);camera.setParameters(parameters);//开始预览camera.startPreview();}}}


 

原创粉丝点击