package com.example.camera;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import android.app.Activity;import android.graphics.Rect;import android.graphics.YuvImage;import android.hardware.Camera;import android.hardware.Camera.Size;import android.os.Bundle;import android.os.Environment;import android.view.SurfaceHolder;import android.view.SurfaceView;public class MainActivity extends Activity implements SurfaceHolder.Callback,Camera.PreviewCallback {private SurfaceView mSurfaceview = null; // SurfaceView对象:(视图组件)视频显示private SurfaceHolder mSurfaceHolder = null; // SurfaceHolder对象:(抽象接口)SurfaceView支持类private Camera mCamera = null; // Camera对象,相机预览@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);mSurfaceview = (SurfaceView) findViewById(R.id.surfaceview);mSurfaceHolder = mSurfaceview.getHolder(); // 绑定SurfaceView,取得SurfaceHolder对象mSurfaceHolder.addCallback(this); // SurfaceHolder加入回调接口// mSurfaceHolder.setFixedSize(176, 144); // 预览大小設置mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// 設置顯示器類型,setType必须设置}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {if (mCamera == null) {return;}mCamera.stopPreview();mCamera.setPreviewCallback(this);mCamera.startPreview();}@Overrideprotected void onResume() {super.onResume();mCamera = Camera.open();}@Overrideprotected void onPause() {super.onPause();if (mCamera != null) {mCamera.release();mCamera = null;}}@Overridepublic void surfaceCreated(SurfaceHolder holder) {try {if (mCamera != null) {mCamera.setPreviewDisplay(mSurfaceHolder);mCamera.startPreview();}} catch (IOException e) {e.printStackTrace();}}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}@Overridepublic void onPreviewFrame(byte[] data, Camera camera) {// 刚刚拍照的文件名String fileName = "IMG_"+ new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()).toString() + ".jpg";File sdRoot = Environment.getExternalStorageDirectory();String dir = "/Camera/";File mkDir = new File(sdRoot, dir);if (!mkDir.exists())mkDir.mkdirs();File pictureFile = new File(sdRoot, dir + fileName);if (!pictureFile.exists()) {try {pictureFile.createNewFile();Camera.Parameters parameters = camera.getParameters();Size size = parameters.getPreviewSize();YuvImage image = new YuvImage(data,parameters.getPreviewFormat(), size.width, size.height,null);FileOutputStream filecon = new FileOutputStream(pictureFile);image.compressToJpeg(new Rect(0, 0, image.getWidth(), image.getHeight()),90, filecon);} catch (IOException e) {e.printStackTrace();}}}}

参考:

http://www.cnblogs.com/mengyan/archive/2012/09/01/2666641.html

http://www.cnblogs.com/sight/archive/2012/04/17/2453671.html

http://www.cnblogs.com/ice4c/archive/2010/10/18/1854756.html

更多相关文章

  1. 类和 Json对象
  2. Android(安卓)上传图片到C#接口 例子
  3. Android(安卓)Spinner控件详解
  4. Android实现DES对字符串加密
  5. Android(安卓)Exception异常汇集【不定时更新】
  6. android:Service
  7. Android的support v4中的Fragment的一个Bug
  8. android 顶部的通知栏
  9. Android--登录界面(demo)

随机推荐

  1. BootStrap入门教程 (四)
  2. 分享27款非常棒的 jQuery 表单插件
  3. JavaScript函数中的Ruby代码
  4. 如何从Python脚本向jQuery发送JSON对象?
  5. 通过],[和创建json对象来分割字符串
  6. 开发学习Jquery实例---双击表格弹出模态
  7. 使用jQuery的ASP.NET - POST vs GET
  8. Ajax php登录表单不指向另一个页面
  9. jQuery autocomplete:如何在结果中选择某
  10. 我通过jQuery-ajax创建了__PHP_Incomplet