首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在主摄像机中设置一个固定的焦点值(Android )

在主摄像机中设置一个固定的焦点值(Android )
EN

Stack Overflow用户
提问于 2022-08-05 04:05:45
回答 1查看 97关注 0票数 0

我正在为我的项目开发一个应用程序,我不希望我的主相机有自动对焦。我希望我的相机有一个特定的焦点值,它可以聚焦在离主相机大约5-10厘米的物体上。

下面是关于如何实现CameraManager的代码:

代码语言:javascript
复制
private String chooseCamera() {
    CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
    try {
      for (final String cameraId : manager.getCameraIdList()) {
        final CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);

        // We don't use a front facing camera in this sample.
        final Integer facing = characteristics.get(CameraCharacteristics.LENS_FACING);
        if (facing != null && facing == CameraCharacteristics.LENS_FACING_FRONT) {
          continue;
        }

        final StreamConfigurationMap map =
                characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);

        if (map == null) {
          continue;
        }

        // Fallback to camera1 API for internal cameras that don't have full support.
        // This should help with legacy situations where using the camera2 API causes
        // distorted or otherwise broken previews.
        useCamera2API =
                (facing == CameraCharacteristics.LENS_FACING_FRONT)
                        || isHardwareLevelSupported(
                        characteristics);
        LOGGER.i("Camera API lv2?: %s", useCamera2API);

//        manager.setTorchMode(cameraId, true);
        return cameraId;
      }
    } catch (CameraAccessException e) {
      LOGGER.e(e, "Not allowed to access camera");
    }
    return null;
  }

protected void setFragment() {
  String cameraId = chooseCamera();
  Fragment fragment;
  if (useCamera2API) {
     CameraConnectionFragment camera2Fragment =
        CameraConnectionFragment.newInstance(
                      (size, rotation) -> {
                        previewHeight = size.getHeight();
                        previewWidth = size.getWidth();
                        CameraActivity.this.onPreviewSizeChosen(size, rotation);
                      },
                      this,
                      getLayoutId(),
                      getDesiredPreviewFrameSize());

      camera2Fragment.setCamera(cameraId);
      fragment = camera2Fragment;
    } else {
      fragment =
              new LegacyCameraConnectionFragment(this, getLayoutId(), getDesiredPreviewFrameSize());
    }

    getFragmentManager().beginTransaction().replace(R.id.container, fragment).commit();
}
EN

回答 1

Stack Overflow用户

发布于 2022-08-08 09:56:17

您需要首先使用CaptureRequest.CONTROL_AF_MODE关闭自动焦点,然后使用该请求键CaptureRequest.LENS_FOCUS_DISTANCE设置所需的焦点距离值。

若要了解设备是否支持手动传感器,请查询特征并检查是否支持。https://developer.android.com/reference/android/hardware/camera2/CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73244546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档