当我尝试创建深度点云类型的imageReader时,我得到一个空对象。
这样做的原因是我已经为此Camera2Basic
修改了代码,它从流配置图中获得了最大的输出大小。问题在于,由于它是一个点云,因此输出的宽度和高度都不合理。因此它返回null宽度和高度,导致null imageReader:
Size largest = Collections.max(
Arrays.asList(map.getOutputSizes(ImageFormat.DEPTH_POINT_CLOUD)),//Returning null
new CompareSizesByArea());
mDMImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(), ImageFormat.DEPTH_POINT_CLOUD, 2);
因此,我真正看到的唯一解决方案是,如果有一种方法可以为深度点云格式创建imageReader,遗憾的是我无法看到这样做的方法,因为它需要有宽度和高度,这显然是不可能的。因此我的问题。
感谢您提供的任何帮助和建议。
答案 0 :(得分:1)
如果我没有错,你就无法创建一个宽度和高度为null的ImageReader。原因是,您可以在documentation中读取您设置为高度和宽度的值是ImageReader将生成的每个图像的默认大小值。
我建议您使用预览宽度和高度值(您应该存储在某个变量中或在某个地方动态计算),或者设备可以支持的最大值。您可以使用以下方法计算相机设备支持的图像尺寸:
private static List<Size> getOutputSizes(CameraCharacteristics cameraCharacteristics, Object kind) {
//my kind value is ImageFormat.JPEG in this example
StreamConfigurationMap streamConfigurationMap = cameraCharacteristics
.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
if (streamConfigurationMap != null) {
Size[] availableResolutionsArray;
//The parameter is either an Integer (JPEG) or a class (MediaRecorder.class)
if (kind instanceof Integer) {
availableResolutionsArray = streamConfigurationMap.getOutputSizes((Integer) kind);
} else {
availableResolutionsArray = streamConfigurationMap.getOutputSizes((Class) kind);
}
List<Size> availableResolutions = Arrays.asList(availableResolutionsArray);
return availableResolutions;
} else {
return Collections.singletonList(new Size(DEFAULT_WIDHT, DEFAULT_HEIGHT));
}
}