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相机的使用方法,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!