如何使用Java在Android中获取相机的焦距

Posted

技术标签:

【中文标题】如何使用Java在Android中获取相机的焦距【英文标题】:How to get focal length of camera in Android using Java 【发布时间】:2022-01-07 21:34:27 【问题描述】:

我想得到相机的焦距。我的目标 API 版本是 21+。我在文档的帮助下尝试了以下操作:

import android.hardware.Camera;

private float getFocalLengthHere() 

    float focalLength = Camera.Parameters.getFocalLength ();  
    return  focalLength;

我遇到了以下错误:

不能从静态上下文引用非静态方法“getFocalLength()”

Here is attached image

在文档中,我没有找到任何可以使用 camera2 调用 Focal Length。

【问题讨论】:

这能回答你的问题吗? "Non-static method cannot be referenced from a static context" error @IvoBeckers 不是真的,我知道为什么我会收到这个错误,在这里我的查询也是,该方法调用在 API 级别 21 以下可用,但是提取当前调用的方法是什么版本即 API 级别 21+ 应该在这里developer.android.com/reference/android/hardware/camera2/… 【参考方案1】:

你需要打开摄像头设备,先获取一个Parameter对象,然后调用getFocalLength:

   Camera myCamera = Camera.open(<camera id>);
   float focalLength = myCamera.getParameters().getFocalLength();
   myCamera.close();

但这是已弃用的相机 API。使用较新的 Camera2 API,您可以:

   CameraCharacteristics = CameraManager.getCameraCharacteristics(<camera id>);
   float focalLength = CameraCharacteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS)[0];

这样更快,因为您无需打开相机即可获取信息。 请注意,支持物理变焦的相机可能会列出多个焦距;第一个是默认值。

【讨论】:

以上是关于如何使用Java在Android中获取相机的焦距的主要内容,如果未能解决你的问题,请参考以下文章

获取iOS设备的焦距

如何校准具有长焦距固定焦距的相机?

Android 相机 2 对焦区域

相机校准,焦距值似乎太大

如何使用 JNI 在 C 中获取原始 Android 相机缓冲区?

Android camera2 API在AF模式下获取焦距