Camera.Parameters.setZoom在设备之间不一致,在某些设备中它会放大更多

问题描述

我正在制作一个自定义相机应用,为此我正在使用Android Camera API。我知道此API现在已被弃用,建议使用Camera2 API。 但是我只需要预览相机即可。

下面是用于设置缩放比例的代码

Camera.Parameters parameters = camera.getParameters();
 parameters.setZoom(30);
  parameters.setPreviewFpsRange(
                previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
  parameters.setPreviewFormat(IMAGE_FORMAT);
 camera.setParameters(parameters);

现在,问题是相机在各个设备上的变焦不相等,某些设备放大很多,而有些设备变焦很大。

我无法在互联网上找到与此相关的任何解释。

无论摄像机的质量和MP如何,我都需要在所有Android设备上使用相同的缩放级别。

解决方法

Camera.Parameters.setZoom()的合法值从0变为Camera.Parameters.getMaxZoom(),您可以在Documentation of setZoom()中阅读

您需要做的是对所有设备上的缩放系数进行归一化,可以通过以下方法完成:

 private setZoom(float zoom) {//to me,here zoom 0 to 1 
 try {
    if (isCameraOpened() && mCameraParameters.isZoomSupported()) {
        int maxZoom = mCameraParameters.getMaxZoom();
        int scaledValue = (int) (zoom * maxZoom);
        mCameraParameters.setZoom(scaledValue);
        mZoom = zoom;
        mCamera.setParameters(mCameraParameters);
    }
  } catch (Exception | Error throwable) {
    Log.e(TAG,Objects.requireNonNull(throwable.getMessage()));
  }
}