为什么在 Camera2 API 中以不同的方式实现缩放



在我的Android应用程序中,我正在尝试使用Camera2 API实现相机缩放。有许多关于如何使用 Camera2 API 实现缩放的示例。一个这样的例子在使用TextureView的Zoom Camera2预览中提到。以下是基本代码片段:

float maxZoom = characteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM));
currentZoom = adjustZoom(currentZoom, maxZoom);
Rect m = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
Rect m1 = cropRectangleBasedOnZoom(m1, curZoom);
previewRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, m1);
...

这似乎有效。但是,旧的 Camera1 API 具有设置缩放值的简单方法。为什么必须在 Camera2 API 中调整区域的额外逻辑?Camera2 逻辑是否带来更好的图像质量?

另外,有没有办法获得最大光学变焦的值?问候。

借助 Camera2,设备可以支持离轴变焦,这比旧的 API 设计更灵活。 也就是说,并非所有设备都支持该功能,您可以通过SCALER_CROPPING_TYPE检查设备是否支持该功能。

一般来说,camera2 试图将所有坐标绑定到传感器活动阵列,因此始终清楚正在考虑传感器的哪个部分,因此这是一个一致性问题。

通过裁剪区域不支持光学变焦;它严格来说与数字变焦有关。 如果设备支持光学变焦,则通过AVAILABLE_FOCAL_LENGTHS和LENS_FOCAL_LENGTH。

最新更新