Camera2预览时重新配置预览、拍照分辨率
时间: 2023-09-10 16:06:03 浏览: 372
要在Camera2预览时重新配置预览、拍照分辨率,您可以按照以下步骤操作:
1. 关闭当前CameraDevice的预览会话(CameraCaptureSession)。
2. 根据新的预览、拍照分辨率,创建新的Surface对象。
3. 根据新的分辨率,创建新的CaptureRequest.Builder对象,设置好CaptureRequest的参数(如对焦、曝光等)。
4. 将新的Surface对象添加到新的CaptureRequest.Builder中。
5. 使用CameraDevice的createCaptureSession()方法,创建新的预览会话。
6. 在新的预览会话中,使用CameraCaptureSession的setRepeatingRequest()方法,启动新的预览。
以下是示例代码:
```java
// 关闭当前CameraDevice的预览会话
captureSession.close();
// 根据新的预览、拍照分辨率,创建新的Surface对象
SurfaceTexture newPreviewSurfaceTexture = new SurfaceTexture(/* new preview size */);
Surface newPreviewSurface = new Surface(newPreviewSurfaceTexture);
Surface newCaptureSurface = /* new capture size */;
// 根据新的分辨率,创建新的CaptureRequest.Builder对象,设置好CaptureRequest的参数
CaptureRequest.Builder newPreviewRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
newPreviewRequestBuilder.addTarget(newPreviewSurface);
CaptureRequest.Builder newCaptureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
newCaptureRequestBuilder.addTarget(newCaptureSurface);
/* 设置拍照相关参数 */
// 使用CameraDevice的createCaptureSession()方法,创建新的预览会话
cameraDevice.createCaptureSession(Arrays.asList(newPreviewSurface, newCaptureSurface), new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession session) {
captureSession = session;
// 在新的预览会话中,使用CameraCaptureSession的setRepeatingRequest()方法,启动新的预览
captureSession.setRepeatingRequest(newPreviewRequestBuilder.build(), null, null);
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession session) {
// 配置预览会话失败
}
}, null);
```
请注意,此代码仅为示例,您需要根据自己的需求进行适当修改。
阅读全文