几种方法介绍

android摄像头采集和预览-几种方法介绍
http://blog.csdn.net/f562230829/article/details/78905530

第一种方法:

权限

开启摄像头需要在 AndroidManifest.xml 中添加摄像头权限 <uses-permission android:name="android.permission.CAMERA"/>注:高版本的手机,还需要动态申请

SurfaceView

1. 布局 xml 文件中       "@+id/surfaceview"        android:layout_width="fill_parent"        android:layout_height="fill_parent" />2. Activity的onCreate中    mSurfaceView = (SurfaceView)findViewById(R.id.surfaceview);    mSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {         @Override         public void surfaceCreated(SurfaceHolder holder) {         }         @Override         public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {         //打开摄像头             CameraController.getInstance().openCamera(holder);         }         @Override         public void surfaceDestroyed(SurfaceHolder holder) {             CameraController.getInstance().closeCamera();         }     });

核心代码

    public boolean openCamera(SurfaceHolder surfaceHolder){        boolean b = true;        try {            //打开摄像头            int cameraId = openCommonCamera();            //设置预览方式            mCamera.setPreviewDisplay(surfaceHolder);            //根据打开的摄像头获取旋转角度            mDisplayOrientation = CameraUtils.getDisplayOrientation(cameraId);            mCamera.setDisplayOrientation(mDisplayOrientation);            //设置摄像头参数            setPameras();            //开始预览            mCamera.startPreview();        //获取预览数据         mCamera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {            @Override            public void onPreviewFrame(byte[] data, Camera camera) {                //取出数据进行处理                //...                //将data重新设置给camera                camera.addCallbackBuffer(data);            }        });        byte[] data = new byte[mPreViewWidth * mPreViewHeight * 3 / 2];        mCamera.addCallbackBuffer(data);        }catch (Exception e){            e.printStackTrace();            b = false;        }        return b;    }    public static int getDisplayOrientation(int cameraId) {        Camera.CameraInfo info = new Camera.CameraInfo();        Camera.getCameraInfo(cameraId, info);        int result;        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {            result = (info.orientation) % 360;            result = (360 - result) % 360;  // compensate the mirror        } else {  // back-facing            result = (info.orientation + 360) % 360;        }        return result;    }    private void setPameras(){        //选择支持的宽高        Camera.Size preViewSize = CameraUtils.getOptimalPreviewSize(mCamera,mPreViewWidth,mPreViewHeight);        Camera.Parameters parameters = mCamera.getParameters();        parameters.setRotation(mRotation);        //预览的图像格式,NV21都支持        parameters.setPreviewFormat(ImageFormat.NV21);        //设置预览宽高        parameters.setPreviewSize(preViewSize.width,preViewSize.height);        int[] range = CameraUtils.adaptPreviewFps(mPreViewFps, parameters.getSupportedPreviewFpsRange());        parameters.setPreviewFpsRange(range[0],range[1]);        mPreviewSize = preViewSize;    }

demo地址

ActivityDemo1为第一种方法

[email protected]:audiocn/androidCamera.git
https://gitee.com/audiocn/androidCamera.git

更多相关文章

  1. android apk获得系统权限
  2. Android应用程序永久获取root权限方法
  3. Android基于ProductFlavors动态配置权限
  4. Android 短信模块分析(二) MMS中四大组件核心功能详解
  5. Android所有权限以及权限分类
  6. Adroid核心分析
  7. 关于Android接入USB外接摄像头以及控制拍照并保存图片

随机推荐

  1. 根据百度地图API得到坐标和地址并在地图
  2. Android(安卓)Google Map APIKey申请
  3. Android(安卓)推送消息(MQTT) PHP发送
  4. Android(安卓)环境搭建
  5. Android(安卓)开启或关闭硬件加速
  6. Android之自定义ProgressBar
  7. android-使App全屏 - 随心
  8. Android(安卓)给TextView 添加图片(左右等
  9. android底部中间凸出导航 BottomProtrudi
  10. android中修改tablayout中的字体大小和颜