0

当我尝试创建深度点云类型的 imageReader 时,我得到一个空对象。

这样做的原因是我已经为此改编了代码Camera2Basic,它从流配置映射中获得了最大的输出大小。问题在于,由于它是点云,因此没有合理的宽度和高度可供输出。因此它返回空的宽度和高度,从而产生空的 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,不幸的是我看不到这样做的方法,因为它需要有一个显然存在的宽度和高度不可能。因此我的问题。

感谢您给我的任何帮助和建议。

4

1 回答 1

1

如果我没记错的话,你不能创建一个宽度和高度为空的 ImageReader。原因是您可以在文档中阅读您设置为 height 和 width 的值是 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));
          }
       }
于 2016-12-07T11:59:26.360 回答