参考

https://blog.csdn.net/afei__/article/details/92102775

https://blog.csdn.net/ganfanzhou/article/details/83721750

https://blog.csdn.net/afei__/article/details/92102775

https://blog.csdn.net/tong5956/article/details/82688886

https://blog.csdn.net/qq_31939617/article/details/86492025

概念:

ImageReader 通过这个类进行读取码流。具体流程如下:

步骤一:新建ImageReader类,设置回调摄像机分辨率,以及回调图像格式

        mPreviewImageReader = ImageReader.newInstance(1280,720,ImageFormat.YUV_420_888,2);

步骤二:设置数据回调

mPreviewImageReader.setOnImageAvailableListener(videoCallback,null);
    ImageReader.OnImageAvailableListener videoCallback = new ImageReader.OnImageAvailableListener() {        @Override        public void onImageAvailable(ImageReader reader) {            Image image = reader.acquireNextImage();            Log.i(tag,"image format: " +image.getHeight()+" "+image.getWidth());            Image.Plane[] planes = image.getPlanes();            int n_image_size = image.getWidth()*image.getHeight()*3/2;            image.close();        }    };

步骤三:添加到预览里面

    private void takePreview() {        try {            // 创建CameraCaptureSession,该对象负责管理处理预览请求和拍照请求            mCameraDevice.createCaptureSession(Arrays.asList(mSurfaceHolder.getSurface(),mPreviewImageReader.getSurface()), new CameraCaptureSession.StateCallback() // ③            {                @Override                public void onConfigured(CameraCaptureSession cameraCaptureSession) {                    if (null == mCameraDevice) return;                    // 当摄像头已经准备好时,开始显示预览                    mCameraCaptureSession = cameraCaptureSession;                    try {                        // 创建预览需要的CaptureRequest.Builder                        final CaptureRequest.Builder previewRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);                        // 将SurfaceView的surface作为CaptureRequest.Builder的目标                        previewRequestBuilder.addTarget(mSurfaceHolder.getSurface());                        previewRequestBuilder.addTarget(mPreviewImageReader.getSurface());                        // 自动对焦                        previewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);                        // 打开闪光灯                        previewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);                        // 显示预览                        CaptureRequest previewRequest = previewRequestBuilder.build();                        mCameraCaptureSession.setRepeatingRequest(previewRequest, null, null);                    } catch (CameraAccessException e) {                        e.printStackTrace();                    }                }                @Override                public void onConfigureFailed(CameraCaptureSession cameraCaptureSession) {                    Toast.makeText(FaceActivity.this, "配置失败", Toast.LENGTH_SHORT).show();                }            }, null);        } catch (CameraAccessException e) {            e.printStackTrace();        }    }

 

更多相关文章

  1. android ADB PUSH 安装apk的具体步骤 及 与 ADB INSTALL 的区别
  2. android 打开word pdf excle 进行预览 (工具类总结一)
  3. [置顶] android 多媒体和相机详解十
  4. android小功能实现之SQLite数据库的基本操作
  5. Android(安卓)使用MediaPlayer播放视频切换后台暂停再恢复互前台
  6. taintDroid系统性能测试之——Android(安卓)AVD命令行使用
  7. android 创建菜单列表及其事件
  8. android 中动态创建控件
  9. android极简原创系列:三层结构和.net

随机推荐

  1. Android(安卓)动画效果 --Animation 动画
  2. Android(安卓)中px pt sp dp之间的关系
  3. android图像绘制(一)——镜像问题
  4. Android输入法挤乱布局问题
  5. Android点击EditText文本框之外任何地方
  6. Android(安卓)React Native在Android(安
  7. Android本地环境搭建步骤
  8. Android开发环境搭建
  9. Android中ListView注意事项
  10. Android(安卓)UI---自定义形状shape