【问题标题】:Camera.Parameters.setZoom() is inconsistent across devices, in some device it zooms moreCamera.Parameters.setZoom() 跨设备不一致,在某些设备中缩放更多
【发布时间】:2020-12-19 10:32:47
【问题描述】:

我正在制作一个自定义相机应用程序,为此我正在使用 Android 相机 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 设备上使用相同的缩放级别。

【问题讨论】:

    标签: android android-camera zooming camera-calibration


    【解决方案1】:

    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()));
      }
    }
    

    【讨论】:

    • 这不是对 OP 的回答。 getMaxZoom() 会根据设备进行更改,并根据其支持的缩放值进行校准。因此,其中的百分比会因设备而异。话虽如此,我自己还没有找到答案。
    猜你喜欢
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 2014-09-03
    相关资源
    最近更新 更多