如何在 Android 设备中获取相机传感器尺寸?
Posted
技术标签:
【中文标题】如何在 Android 设备中获取相机传感器尺寸?【英文标题】:How to get Camera Sensor Size in android device? 【发布时间】:2011-12-27 14:28:13 【问题描述】:谁能知道如何在安卓设备中获取相机的传感器尺寸?
谢谢
【问题讨论】:
【参考方案1】:从 API 级别 21 开始就有可能。来自文档 (https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#SENSOR_INFO_PHYSICAL_SIZE):
public static final Key SENSOR_INFO_PHYSICAL_SIZE
全像素阵列的物理尺寸。 [...]
单位:毫米
我使用这种代码。请注意,可能不止一个摄像头:
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
private SizeF getCameraResolution(int camNum)
SizeF size = new SizeF(0,0);
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try
String[] cameraIds = manager.getCameraIdList();
if (cameraIds.length > camNum)
CameraCharacteristics character = manager.getCameraCharacteristics(cameraIds[camNum]);
size = character.get(CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE);
catch (CameraAccessException e)
Log.e("YourLogString", e.getMessage(), e);
return size;
请注意,需要捕获异常CameraAccessException
。
不要忘记将<uses-sdk android:minSdkVersion="21" />
添加到您的清单中。
【讨论】:
完美的解决方案,但是,如何在21 API之前的版本中获得相同的值? 这个方法也是写吗? ***.com/a/41032402/4548520 似乎在某些设备上无法正常工作。使用此传感器信息大小进行计算时,我得到的相机角度不正确。仅对于某些设备,我在使用 Camera2 API 和 Camera Legacy API 时得到相同的结果【参考方案2】:使用 Camera1 Api 也很容易获得相机传感器的宽度和高度。获取水平和垂直视角和焦距,剩下的就是小三角函数。
Camera.Parameters params = mCamera.getParameters();
focalLength = params.getFocalLength();
horizontalViewAngle = params.getHorizontalViewAngle();
verticalViewAngle = params.getVerticalViewAngle();
A = 视角,l = 焦距,h = 传感器高度/2 => tan(A/2) = h/l
对于我的焦距为 1.15 毫米、水平视角为 54.8 度的设备:
传感器宽度 = tan(54.8/2)*2*1.15 = 1.19mm
这个值与我使用 DomTomCat 发布的方法得到的值相同。
【讨论】:
以上是关于如何在 Android 设备中获取相机传感器尺寸?的主要内容,如果未能解决你的问题,请参考以下文章