android camera 通过onPreviewFrame采集视频

来源:互联网 发布:网络电子商务图标 编辑:程序博客网 时间:2024/06/03 12:29
001package com.example.camera;
002 
003import java.io.File;
004import java.io.FileOutputStream;
005import java.io.IOException;
006import java.text.SimpleDateFormat;
007import java.util.Date;
008 
009import android.app.Activity;
010import android.graphics.Rect;
011import android.graphics.YuvImage;
012import android.hardware.Camera;
013import android.hardware.Camera.Size;
014import android.os.Bundle;
015import android.os.Environment;
016import android.view.SurfaceHolder;
017import android.view.SurfaceView;
018 
019public class MainActivity extends Activity implements SurfaceHolder.Callback,
020        Camera.PreviewCallback {
021 
022    private SurfaceView mSurfaceview = null// SurfaceView对象:(视图组件)视频显示
023    private SurfaceHolder mSurfaceHolder = null// SurfaceHolder对象:(抽象接口)SurfaceView支持类
024    private Camera mCamera = null// Camera对象,相机预览
025 
026    @Override
027    public void onCreate(Bundle savedInstanceState) {
028        super.onCreate(savedInstanceState);
029        setContentView(R.layout.main);
030        mSurfaceview = (SurfaceView) findViewById(R.id.surfaceview);
031        mSurfaceHolder = mSurfaceview.getHolder(); // 绑定SurfaceView,取得SurfaceHolder对象
032        mSurfaceHolder.addCallback(this); // SurfaceHolder加入回调接口
033        // mSurfaceHolder.setFixedSize(176, 144); // 预览大小設置
034        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// 設置顯示器類型,setType必须设置
035    }
036 
037    @Override
038    public void surfaceChanged(SurfaceHolder holder, int format, int width,
039            int height) {
040        if (mCamera == null) {
041            return;
042        }
043        mCamera.stopPreview();
044        mCamera.setPreviewCallback(this);
045        mCamera.startPreview();
046    }
047 
048    @Override
049    protected void onResume() {
050        super.onResume();
051        mCamera = Camera.open();
052    }
053 
054    @Override
055    protected void onPause() {
056        super.onPause();
057        if (mCamera != null) {
058            mCamera.release();
059            mCamera = null;
060        }
061    }
062 
063    @Override
064    public void surfaceCreated(SurfaceHolder holder) {
065        try {
066            if (mCamera != null) {
067                mCamera.setPreviewDisplay(mSurfaceHolder);
068                mCamera.startPreview();
069            }
070        catch (IOException e) {
071            e.printStackTrace();
072        }
073 
074    }
075 
076    @Override
077    public void surfaceDestroyed(SurfaceHolder holder) {
078 
079    }
080 
081    @Override
082    public void onPreviewFrame(byte[] data, Camera camera) {
083 
084        // 刚刚拍照的文件名
085        String fileName = "IMG_"
086                new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date())
087                        .toString() + ".jpg";
088        File sdRoot = Environment.getExternalStorageDirectory();
089        String dir = "/Camera/";
090        File mkDir = new File(sdRoot, dir);
091        if (!mkDir.exists())
092            mkDir.mkdirs();
093        File pictureFile = new File(sdRoot, dir + fileName);
094        if (!pictureFile.exists()) {
095            try {
096                pictureFile.createNewFile();
097                Camera.Parameters parameters = camera.getParameters();
098                Size size = parameters.getPreviewSize();
099                YuvImage image = new YuvImage(data,
100                        parameters.getPreviewFormat(), size.width, size.height,
101                        null);
102                FileOutputStream filecon = new FileOutputStream(pictureFile);
103                image.compressToJpeg(
104                        new Rect(00, image.getWidth(), image.getHeight()),
105                        90, filecon);
106            catch (IOException e) {
107                e.printStackTrace();
108            }
109        }
110    }
111}
转自:http://my.oschina.net/eclipse88/blog/80115

参考:

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

0 0
原创粉丝点击