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

时间:2018-03-15 00:29:09

标签: android

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

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逻辑能否产生更好的图像质量?

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

1 个答案:

答案 0 :(得分:1)

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

通常,camera2会尝试将所有坐标连接到传感器有源阵列,因此它始终清楚传感器的哪个部分正在考虑中,因此这是一致性问题。

通过裁剪区域不支持光学变焦;它严格来说就是数码变焦。如果设备支持光学变焦,则可通过AVAILABLE_FOCAL_LENGTHSLENS_FOCAL_LENGTH进行光学变焦。