当前位置: 代码迷 >> Android >> android camera的根本使用
  详细解决方案

android camera的根本使用

热度:27   发布时间:2016-05-01 17:15:58.0
android camera的基本使用
import java.io.File;import java.io.FileOutputStream;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.PixelFormat;import android.graphics.Bitmap.CompressFormat;import android.hardware.Camera;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.Display;import android.view.KeyEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.Window;import android.view.WindowManager;public class MyCamera extends Activity{	private SurfaceView surfaceView;	Camera camera;	boolean preview=false;	private static final String TAG = "camera";	public void onCreate(Bundle savedInstanceState){		super.onCreate(savedInstanceState);		Window window=getWindow();//		设置没有title		requestWindowFeature(Window.FEATURE_NO_TITLE);//		全屏显示		window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager				.LayoutParams.FLAG_FULLSCREEN);		window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);		setContentView(R.layout.main);		surfaceView=(SurfaceView)this.findViewById(R.id.surfaceView);		surfaceView.getHolder().addCallback(new SufaceListener());		//下面设置surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前		surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);		surfaceView.getHolder().setFixedSize(176,144);//设置分辨率	}	private final class SufaceListener implements SurfaceHolder.Callback{						public void surfaceChanged(SurfaceHolder holder,int format,int width,int height){					}			public void surfaceCreated(SurfaceHolder holder){			try{				camera=Camera.open();				Camera.Parameters parameters=camera.getParameters();				WindowManager wm=(WindowManager)getSystemService(Context.WINDOW_SERVICE);				Display display=wm.getDefaultDisplay();				parameters.setPreviewSize(display.getWidth(),display.getHeight());				//每秒3帧				parameters.setPreviewFrameRate(3);				parameters.setPreviewFormat(PixelFormat.JPEG);				parameters.set("jpeg-quality", 85);				parameters.setPictureSize(display.getWidth(), display.getHeight());				camera.setParameters(parameters);				camera.setPreviewDisplay(surfaceView.getHolder());//显示取景画面				camera.startPreview();				preview=true;			}			catch(Exception e){				Log.e(TAG,e.toString());							}		}		public void surfaceDestroyed(SurfaceHolder holder){			if(camera!=null){				if(preview)					camera.stopPreview();				camera.release();				camera=null;			}		}				}	public boolean onKeyDown(int keyCode,KeyEvent event){		if(camera!=null&&event.getRepeatCount()==0){			switch(keyCode){			case KeyEvent.KEYCODE_SEARCH:				camera.autoFocus(null);//自动对焦				break;			case KeyEvent.KEYCODE_DPAD_CENTER: ;			case  KeyEvent.KEYCODE_CAMERA:				camera.takePicture(null,null, new PictureCallbackListener());				break;			}		}		return true;	}	public final class PictureCallbackListener implements Camera.PictureCallback{		public void onPictureTaken(byte[] data,Camera canera){			try{				Bitmap bitmap=BitmapFactory.decodeByteArray(data, 0, data.length);				File file=new File(Environment.getExternalStorageDirectory(),"ljh.jpg");				FileOutputStream outStream=new FileOutputStream(file);				bitmap.compress(CompressFormat.JPEG, 100,outStream);				outStream.close();				//				camera.stopPreview();				camera.startPreview();				preview=true;			}			catch(Exception e){				Log.e(TAG,e.toString());			}		}	}	/*	//调用系统自带的照相功能	Intent intent=new Intent();	intent.setAction("android.media.action.STILL_IMAGE_CAMERA");		*/}

?

  相关解决方案