使用摄像头拍照-android新技术

使用摄像头拍照在main.xml布局文件添加用于显示取景画面的SurfaceView控件: SurfaceView surfaceView = (SurfaceView)this.findViewById(R.id.surfaceView); surfaceView.getHolder().setFixedSize(176, 144); //设置分辨率/*下面设置Surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前*/ surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); Camera camera = Camera.open(); WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); Camera.Parameters parameters = camera.getParameters(); parameters.setPreviewSize(display.getWidth(), display.getHeight());//设置预览照片的大小parameters.setPreviewFrameRate(3);//每秒3帧parameters.setPictureFormat(PixelFormat.JPEG);//设置照片的输出格式parameters.set("jpeg-quality", 85);//照片质量parameters.setPictureSize(display.getWidth(), display.getHeight());//设置照片的大小camera.setParameters(parameters); camera.setPreviewDisplay(surfaceView.getHolder());//通过SurfaceView显示取景画面camera.startPreview();//开始预览camera.autoFocus(null);//自动对焦camera.takePicture(null, jpegCallback);//拍照片camera.stopPreview();//停止预览camera.release();//释放摄像头 package cn.itcast.picture; import java.io.FileOutputStream; import android.app.Activity; import android.content.Context; 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.WindowManager; public class TakePictureActivity extends Activity { private static final String TAG = "TakePictureActivity"; private SurfaceView surfaceView; private Camera camera; private boolean preview; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Window window = getWindow(); 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{ @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override 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());//设置预览照片的大小parameters.setPreviewFrameRate(3);//每秒3帧parameters.setPictureFormat(PixelFormat.JPEG);//设置照片的输出格式parameters.set("jpeg-quality", 85);//照片质量parameters.setPictureSize(display.getWidth(), display.getHeight());//设置照片的大小camera.setParameters(parameters); camera.setPreviewDisplay(surfaceView.getHolder());//通过SurfaceView显示取景画面camera.startPreview(); preview = true; } catch (Exception e) { Log.e(TAG, e.toString()); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { if(camera!=null){ if(preview) camera.stopPreview(); camera.release(); camera = null; } } } @Override 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, new PictureCallbackListener()); break; } } return true; } private final class PictureCallbackListener implements Camera.PictureCallback{ @Override public void onPictureTaken(byte[] data, Camera camera) { try { Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); File file = new File(Environment.getExternalStorageDirectory(), "itcast.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()); } } *
ppt 文件大小:1.56MB