android之camera2获取数据
16lz
2021-01-23
参考
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(); } }
更多相关文章
- android ADB PUSH 安装apk的具体步骤 及 与 ADB INSTALL 的区别
- android 为摄像头增加闪光灯(s5pv210)
- Android 到ARM versatile PB板移植主要步骤
- Android Banner 的简单使用步骤
- Android 安装步骤
- Android中点击事件之KeyListener实现步骤
- Android闪光灯开关