Camera2使用surface支持
时间: 2023-07-11 19:51:41 浏览: 44
Camera2 API 支持将相机预览数据输出到 Surface 对象中,这可以通过设置 CaptureRequest 中的目标 Surface 来实现。在设置 CaptureRequest 的时候,我们可以使用类似以下的代码来将相机预览数据输出到 SurfaceView 中:
```java
SurfaceView surfaceView = findViewById(R.id.surface_view);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
surfaceHolder.setFixedSize(previewSize.getWidth(), previewSize.getHeight());
Surface previewSurface = surfaceHolder.getSurface();
// 创建一个预览请求
CaptureRequest.Builder previewRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
previewRequestBuilder.addTarget(previewSurface);
// 开始预览
cameraDevice.createCaptureSession(Arrays.asList(previewSurface), new CameraCaptureSession.StateCallback() {...}, null);
```
在上面的代码中,我们首先获取了 SurfaceView 的 SurfaceHolder 对象,并设置了它的大小。然后,我们通过调用 `getSurface()` 方法获取了它对应的 Surface 对象,并将其添加到了预览请求中。最后,我们使用 `createCaptureSession()` 方法创建了一个会话,并将 Surface 对象传递给了它。
需要注意的是,在实际使用中,我们还需要处理 Surface 对象的生命周期,以确保它在不需要使用的时候能够被正确地释放。