android camera 通过onPreviewFrame采集视频
16lz
2021-12-04
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
更多相关文章
- 类和 Json对象
- Android(安卓)上传图片到C#接口 例子
- Android(安卓)Spinner控件详解
- Android实现DES对字符串加密
- Android(安卓)Exception异常汇集【不定时更新】
- android:Service
- Android的support v4中的Fragment的一个Bug
- android 顶部的通知栏
- Android--登录界面(demo)