【发布时间】:2011-12-27 14:28:13
【问题描述】:
谁能知道如何在安卓设备中获取相机的传感器尺寸?
谢谢
【问题讨论】:
标签: android camera android-camera
谁能知道如何在安卓设备中获取相机的传感器尺寸?
谢谢
【问题讨论】:
标签: android camera android-camera
从 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" /> 添加到您的清单中。
【讨论】:
使用 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 发布的方法得到的值相同。
【讨论】: