android之camera2获取数据

参考

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();
        }
    }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值