如何使用多相机android捕获不同分辨率的图像?

问题描述 投票:0回答:2

我正在尝试使用 Android 多相机 API 捕获图像。我现在面临的问题是我无法获取支持的分辨率并为特定的物理相机准备输出配置。

Google 官方文档建议使用

MultiResoultionImageReader
,这是 link,但是仅当相机设备通过在
MultiResolutionImageReader
中宣传指定的输出格式来支持多分辨率输出流时,才应将
android.hardware.camera2.CameraCharacteristics#SCALER_MULTI_RESOLUTION_STREAM_CONFIGURATION_MAP
用于相机设备。

但是它返回 null,我正在使用 Pixel 5 和 6 进行测试。

val multipleStreamConfigurationMap = mCameraCharacteristics.get(CameraCharacteristics.SCALER_MULTI_RESOLUTION_STREAM_CONFIGURATION_MAP)
如何设置物理相机的分辨率?

android android-camera android-camera2 multi-camera-api
2个回答
0
投票

大多数物理相机不会直接暴露给应用程序开发人员。 它通过一些逻辑cameraID公开。在使用MultiResolutionImageReader之前,您需要检查您所使用的设备是否支持逻辑cameraID


0
投票

我不确定这是否正是您想要的,但在我的 Pixel 6 Pro 上,我可以通过首先在物理 ID 上使用 getCameraCharacteristics 来获取特定物理相机的 StreamConfigurationMap;例如,P6 pro 上的长焦镜头的 ID 为“4”。然后使用 .get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP) 就像使用普通相机 ID 一样。这也适用于 Pixel 4 XL。

您还可以使用物理 ID 的特征来获取 ISO 范围、焦距以及普通 ID 可以获得的任何信息。

我还尝试了 MultiResoultionImageReader,发现它和你一样,在 Pixel 6 上返回 null。

希望这个小例子有帮助:

try {
    physicalCharacteristics = manager.getCameraCharacteristics(physicalId);
}catch (CameraAccessException e){
    throw new RuntimeException(e);
}
StreamConfigurationMap tempMap = physicalCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Range<Integer> isoRange = physicalCharacteristics.get(CameraCharacteristics.SENSOR_INFO_SENSITIVITY_RANGE);

对于任何不知道的读者,您可以通过在该逻辑相机的 CameraCharacteristics 上调用 .getPhysicalCameraIds() 来找到给定逻辑相机的物理 ID。

© www.soinside.com 2019 - 2024. All rights reserved.