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

Android平台JPEG_R(Ultra HDR)图像保存实现方案咨询

问题描述

我基于修改后的Camera2Raw示例开发,使用Pixel 6 Pro设备,官方相机可保存Ultra HDR图像,但配置ImageFormat.JPEG_R格式的ImageReader时出现“Configuration Failed”错误。即便配置成功,也不清楚如何正确保存JPEG_R图像。目前仅找到桌面端的libultrahdr示例代码,现有常规JPEG与DNG的保存代码如下,求问ImageFormat.JPEG_R对应的保存代码实现方式,是否存在简便方案?

switch (format) {
                case ImageFormat.JPEG: {
                    ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
                    byte[] bytes = new byte[buffer.remaining()];
                    buffer.get(bytes);
                    FileOutputStream output = null;
                    try {
                        output = new FileOutputStream(mFile);
                        output.write(bytes);
                        success = true;
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        mImage.close();
                        closeOutput(output);
                    }
                    break;
                }
                case ImageFormat.RAW_SENSOR: {
                    DngCreator dngCreator = new DngCreator(mCharacteristics, mCaptureResult);
                    FileOutputStream output = null;
                    try {
                        output = new FileOutputStream(mFile);
                        dngCreator.writeImage(output, mImage);
                        success = true;
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        mImage.close();
                        closeOutput(output);
                    }
                    break;
                }
}
解决方案

一、先解决ImageReader配置失败问题

  • 检查设备能力:确认CameraCharacteristics中REQUEST_AVAILABLE_CAPABILITIES包含REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT,同时SCALER_STREAM_CONFIGURATION_MAP支持目标尺寸与ImageFormat.JPEG_R的组合。
  • 配置CaptureRequest:创建请求时需设置CONTROL_DYNAMIC_RANGE_PROFILE为CONTROL_DYNAMIC_RANGE_PROFILE_HDR10_PLUS(对应Ultra HDR),且ImageReader的尺寸需与拍照/预览尺寸完全匹配。

二、JPEG_R图像的保存实现

JPEG_R是封装了HDR元数据的标准JPEG格式,其Image数据结构与普通JPEG一致,单Plane包含完整文件流,直接写入即可:

case ImageFormat.JPEG_R: {
    ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
    byte[] bytes = new byte[buffer.remaining()];
    buffer.get(bytes);
    FileOutputStream output = null;
    try {
        output = new FileOutputStream(mFile);
        output.write(bytes);
        success = true;
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        mImage.close();
        closeOutput(output);
    }
    break;
}
  • 说明:Camera2框架已在捕获阶段完成HDR元数据的封装,无需额外处理,直接写入文件就能生成可被系统识别的Ultra HDR图像。

三、简便方案

  • 切换到CameraX开发:CameraX已封装Ultra HDR支持,只需在ImageCapture.Builder中调用setDynamicRange(DynamicRange.ULTRA_HDR),保存时直接获取数据流写入文件即可,无需手动配置Camera2的复杂参数。
  • 利用系统工具类:Android 14及以上版本提供了androidx.camera.core.imagecapture.UltraHdrImageCapture相关API,可进一步简化HDR图像的捕获与保存流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:45:00