camera2设置预览分辨率
时间: 2023-07-04 21:23:11 浏览: 38
您可以使用以下代码来设置Camera2的预览分辨率:
```
private void setPreviewSize() {
try {
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraId);
StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Size[] sizes = map.getOutputSizes(SurfaceTexture.class);
// Choose a size for the camera preview
Size previewSize = chooseOptimalSize(sizes, width, height);
// Set the aspect ratio of TextureView to the size of preview
int orientation = getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
textureView.setAspectRatio(previewSize.getWidth(), previewSize.getHeight());
} else {
textureView.setAspectRatio(previewSize.getHeight(), previewSize.getWidth());
}
// Set the size of preview
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);
previewRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, AutoFocusHelper.cropRegionForZoom(previewRequestBuilder.build(), zoom));
previewRequestBuilder.addTarget(surface);
cameraManager.openCamera(cameraId, mCameraDeviceCallback, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
private Size chooseOptimalSize(Size[] sizes, int width, int height) {
List<Size> bigEnough = new ArrayList<>();
for (Size option : sizes) {
if (option.getHeight() == option.getWidth() * height / width &&
option.getWidth() >= width && option.getHeight() >= height) {
bigEnough.add(option);
}
}
if (bigEnough.size() > 0) {
return Collections.min(bigEnough, new CompareSizesByArea());
} else {
return sizes[0];
}
}
```
其中,`width`和`height`分别是您想设置的预览分辨率的宽度和高度。`chooseOptimalSize`方法会自动选择最适合的预览分辨率。