You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Camera2Raw使用物理摄像头ID拍摄DNG图像报错求助

问题分析与解决方案

核心结论

preCorrectionActiveArraySize和pixelArraySize是摄像头硬件的只读属性,无法直接设置,它们由传感器硬件和镜头校正逻辑决定,只能从CameraCharacteristics中读取。

崩溃原因

RAW格式与JPEG/视频的输出逻辑存在本质差异:

  • JPEG和视频经过ISP(图像信号处理器)处理,支持对原始传感器数据进行裁剪、缩放,因此可以适配多种自定义分辨率;
  • RAW格式是传感器直接输出的原始像素数据,必须严格匹配传感器的有效阵列尺寸(即pixelArraySize或preCorrectionActiveArraySize对应的尺寸),不允许缩放或裁剪——你硬编码的4000x3000并非该物理摄像头RAW输出支持的有效尺寸,因此触发尺寸不匹配报错。

解决步骤

  1. 获取物理摄像头的RAW支持分辨率
    针对你使用的物理摄像头ID("4"),从其CameraCharacteristics中提取RAW格式的有效输出尺寸:

    // 获取目标物理摄像头的特性
    CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics("4");
    // 获取流配置映射
    StreamConfigurationMap configMap = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
    // 获取RAW_SENSOR格式支持的所有分辨率
    Size[] rawSupportedSizes = configMap.getOutputSizes(ImageFormat.RAW_SENSOR);
    // 筛选出最大的RAW分辨率(可根据需求调整)
    Size targetRawSize = Collections.max(Arrays.asList(rawSupportedSizes), (size1, size2) -> {
        return Long.compare((long)size1.getWidth() * size1.getHeight(), (long)size2.getWidth() * size2.getHeight());
    });
    
  2. 使用匹配的尺寸创建ImageReader
    将之前硬编码的4000x3000替换为上述获取的targetRawSize:

    ImageReader rawImageReader = ImageReader.newInstance(
        targetRawSize.getWidth(),
        targetRawSize.getHeight(),
        ImageFormat.RAW_SENSOR,
        1 // 仅保留一个缓冲区即可
    );
    
  3. 验证尺寸匹配性
    可额外读取硬件属性确认:

    // 获取传感器像素阵列尺寸
    Rect pixelArraySize = characteristics.get(CameraCharacteristics.SENSOR_INFO_PIXEL_ARRAY_SIZE);
    // 获取镜头校正后的有效阵列尺寸
    Rect preCorrectionSize = characteristics.get(CameraCharacteristics.LENS_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE);
    // 确认选中的RAW尺寸与其中一个匹配
    boolean isSizeValid = (targetRawSize.getWidth() == pixelArraySize.width() && targetRawSize.getHeight() == pixelArraySize.height())
        || (targetRawSize.getWidth() == preCorrectionSize.width() && targetRawSize.getHeight() == preCorrectionSize.height());
    

补充说明

物理摄像头与逻辑摄像头的特性完全独立,务必确保你获取的是目标物理摄像头ID对应的CameraCharacteristics,而非逻辑摄像头的特性数据——这是很多开发者容易踩的坑。

内容的提问来源于stack exchange,提问作者Interstadial

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 07:40:10