android获取帧保存到本地
来源:互联网 发布:发送短信的软件 编辑:程序博客网 时间:2024/06/04 00:41
package com.fx.realtimevideodemo;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.ImageFormat;import android.graphics.Matrix;import android.graphics.Rect;import android.graphics.YuvImage;import android.hardware.Camera;import android.media.MediaPlayer;import android.media.MediaRecorder;import android.os.Bundle;import android.os.Environment;import android.os.SystemClock;import android.support.v7.app.AppCompatActivity;import android.util.DisplayMetrics;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.view.Window;import android.widget.Button;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback, Camera.PreviewCallback { private static final String TAG = "MainActivity"; private SurfaceView surfaceView; private Button start, stop; private boolean mStartedFlg = false;//是否正在录像 private boolean mIsPlay = false;//是否正在播放录像 private MediaRecorder mRecorder; private SurfaceHolder mSurfaceHolder; private Camera mCamera; private MediaPlayer mediaPlayer; private String path; private int mPreviewWidth; private int mPreviewHeight; private boolean bIfPreview; boolean isStart = false; List<byte[]> dataList = new ArrayList(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); start = (Button) findViewById(R.id.start); stop = (Button) findViewById(R.id.stop); start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { isStart = true; } }); stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { isStart = false; Camera.Size size = mCamera.getParameters().getPreviewSize(); for (byte[] b : dataList) { try { YuvImage image = new YuvImage(b, ImageFormat.NV21, size.width, size.height, null); if (image != null) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); image.compressToJpeg(new Rect(0, 0, size.width, size.height), 80, stream); Bitmap bmp = BitmapFactory.decodeByteArray(stream.toByteArray(), 0, stream.size()); //图片旋转 rotateMyBitmap(bmp); stream.close(); } } catch (Exception ex) { Log.e("Sys", "Error:" + ex.getMessage()); } } } }); DisplayMetrics dm = new DisplayMetrics(); //取得窗口属性 getWindowManager().getDefaultDisplay().getMetrics(dm); mPreviewWidth = dm.widthPixels; mPreviewHeight = dm.heightPixels; Log.i(TAG,"mPreviewWidth="+mPreviewWidth+"==mPreviewHeight=="+mPreviewHeight); initSurfaceView(); } private void initSurfaceView() { surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView); mSurfaceHolder = surfaceView.getHolder(); // 绑定SurfaceView,取得SurfaceHolder对象 mSurfaceHolder.addCallback(this); // SurfaceHolder加入回调接口 mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// 設置顯示器類型,setType必须设置 } int i= 0; @Override public void onPreviewFrame(byte[] data, Camera camera) { Log.i(TAG , "onPreviewFrame"+i); if (i<50 && isStart) { i++; dataList.add(data); } } public void rotateMyBitmap(Bitmap bmp){ //*****旋转一下 Matrix matrix = new Matrix(); matrix.postRotate(270); Bitmap nbmp2 = Bitmap.createBitmap(bmp, 0,0, bmp.getWidth(), bmp.getHeight(), matrix, true); saveBitmap(nbmp2); } public void saveBitmap(Bitmap bitmap) { // 首先保存图片 Log.i(TAG, "saveBitmap"); File appDir = new File(Environment.getExternalStorageDirectory(), "zxing_image"); if (!appDir.exists()) { appDir.mkdir(); } String fileName = SystemClock.currentThreadTimeMillis() + ".png"; File file = new File(appDir, fileName); Log.i(TAG, "file="+file.toString()); try { FileOutputStream fos = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } @Override public void surfaceCreated(SurfaceHolder holder) { mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); try { Log.i(TAG, "SurfaceHolder.Callback:surface Created"); mCamera.setPreviewDisplay(mSurfaceHolder);// mCamera.setOneShotPreviewCallback(this); mCamera.setPreviewCallback(this); } catch (IOException e) { e.printStackTrace(); if (null != mCamera) { mCamera.release(); mCamera = null; } Log.i(TAG + "initCamera", e.getMessage()); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { initCamera(); // 开始预览 mCamera.startPreview(); bIfPreview = true; } @Override public void surfaceDestroyed(SurfaceHolder holder) { if (null != mCamera) { mCamera.setPreviewCallback(null); //!!这个必须在前,不然退出出错 mCamera.stopPreview(); bIfPreview = false; mCamera.release(); mCamera = null; } } /** * 获取SD path * * @return */ public String getSDPath() { File sdDir = null; boolean sdCardExist = Environment.getExternalStorageState() .equals(android.os.Environment.MEDIA_MOUNTED); // 判断sd卡是否存在 if (sdCardExist) { sdDir = Environment.getExternalStorageDirectory();// 获取跟目录 return sdDir.toString(); } return null; } private void initCamera(){//surfaceChanged中调用 //CameraID表示0或者1,表示是前置摄像头还是后置摄像头 mCamera.setDisplayOrientation(90); //参数设置 Camera.Parameters parameters = mCamera.getParameters(); //设置放大倍数 parameters.setZoom(12); parameters.setPreviewFrameRate(30); //开启闪光灯 parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); //参数设置赋给Camera对象 mCamera.setParameters(parameters); }}
阅读全文
0 0
- android获取帧保存到本地
- 关于Android开发保存bitmap获取图片到本地方法
- Android 保存图片到本地
- android保存图片到本地
- Android保存图片到本地
- Android保存图片到本地
- Android保存Bitmap到本地
- android 保存bitmap到本地
- Android保存图片到本地
- Android 保存图片到本地
- android 保存bitmap到本地
- Android图片保存到本地,并再从本地获取图片
- Android图片保存到本地,并再从本地获取图片
- 保存图片到本地目录和获取
- 获取网络图片,并保存到本地
- 保存图片到本地目录和获取
- iOS保存图片到本地,获取路径
- PHP获取远程图片保存到本地
- LUA 排序算法和性能分析[1]:table.sort
- KAFKA 1.0 文档(六):消费者配置
- 基本模块--fs
- adf4360-0和adf4360-4
- centos7 项目部署历程
- android获取帧保存到本地
- 马上就是圣诞节了,但是,没想到程序猿的圣诞节竟然是这样的?
- 数据库表基本操作
- Oracle Rman-备份脚本
- 收藏的文章
- 聊聊NB-iot等物联网技术适合你的项目吗?
- zTree在JAVA项目中的学习
- 【八中】字串距离
- 六、服务治理