当前位置: 首页 > article >正文

HDR 图像的双层结构——元数据生成与 hdrDecompose/hdrCompose 完整解析

文章目录HDR 图到底怎么存的三个核心操作的关系元数据生成代码详解HDR 分解与合成代码详解HdrMetadataType 四种类型对比像素格式与 HDR 类型对应关系StorageLink 串联四个页面的设计思路踩坑记录写在最后一直以来我以为 HDR 图就是更亮的图直到看了HDRImageConversionComponent.ets里的双层分解逻辑才明白 HDR 图的存储结构比想象中复杂。这篇把元数据生成和双层结构都说清楚。HDR 图到底怎么存的用大白话解释 HDR 图像的两种存储方式单层 HDRALTERNATE 类型就是一张高色深的图用 RGBA_1010102每通道 10 bit格式存储整张图包含了完整的 HDR 信息。类比一台原装 OLED 显示器。双层 HDRBASE GAINMAP把 HDR 分成两张图——BASE 层一张普通 SDR 图DISPLAY_P3 色彩空间兼容普通屏幕显示GAINMAP 层一张增益图记录 SDR 和 HDR 之间的亮度差异信息类比BASE 层就是普通照片GAINMAP 层是一张哪里需要亮多少的蒙版。有 HDR 屏幕时两层合成没有就直接用 BASE 层。三个核心操作的关系元数据生成代码详解元数据生成页面MetadataGenerationComponent在onAppear时自动执行依赖前面色彩空间转换页生成的 HDR 图import{image}fromkit.ImageKit;import{colorSpaceManager}fromkit.ArkGraphics2D;importnativePixfromlibentry.so;Componentexportstruct MetadataGenerationComponent{// 从 AppStorage 拿到色彩空间转换页生成的 HDR 图StorageLink(hdrPixelMap)hdrPixelMap:image.PixelMap|undefinedundefined;StatepixelMapDst:image.PixelMap|undefinedundefined;StateisShow:booleanfalse;build(){NavDestination(){// ... UI 代码}.onAppear((){if(!this.hdrPixelMap){return;}this.isShowfalse;// 第一步确保色彩空间是 BT2020_HLGletcolorSpaceBT2020_HLG:colorSpaceManager.ColorSpaceManagercolorSpaceManager.create(colorSpaceManager.ColorSpace.BT2020_HLG);this.hdrPixelMap.setColorSpace(colorSpaceBT2020_HLG);// 第二步设置元数据类型为单层 HDRALTERNATEthis.hdrPixelMap.setMetadata(image.HdrMetadataKey.HDR_METADATA_TYPE,image.HdrMetadataType.ALTERNATE);// 第三步调用 Native 接口生成标准元数据// generateMetadata 会往 PixelMap 里写入 ISO 21496-1 标准的 HDR 元数据nativePix.generateMetadata(this.hdrPixelMap);this.pixelMapDstthis.hdrPixelMap;this.isShowtrue;})}}元数据生成做了什么Native 层的generateMetadata会分析图像的亮度分布计算出 HDRGMHDR Gainmap Metadata等标准元数据写入 PixelMap。这些元数据告诉显示系统这张图的最大亮度是多少、动态范围是多少、用哪个曲线来显示。HDR 分解与合成代码详解HDRImageConversionComponent在onAppear时同时做分解和合成hdrDecomposeAndCompose():void{// 第一步准备两个空白目标 PixelMap // 注意createPixelMap 参数顺序是 (height, width)letdualPixelMap:image.PixelMapnativePix.createPixelMap(this.inputHeight,this.inputWidth);letgainmapPixelMap:image.PixelMapnativePix.createPixelMap(this.inputHeight,this.inputWidth);// 第二步设置 BASE 层和 GAINMAP 层的元数据 // BASE 层SDR 基础层用 DISPLAY_P3 色彩空间letcolorSpaceDisplayP3colorSpaceManager.create(colorSpaceManager.ColorSpace.DISPLAY_P3);dualPixelMap.setColorSpace(colorSpaceDisplayP3);dualPixelMap.setMetadata(image.HdrMetadataKey.HDR_METADATA_TYPE,image.HdrMetadataType.BASE// 标记为 BASE 层);// GAINMAP 层增益图层也用 DISPLAY_P3gainmapPixelMap.setColorSpace(colorSpaceDisplayP3);gainmapPixelMap.setMetadata(image.HdrMetadataKey.HDR_METADATA_TYPE,image.HdrMetadataType.GAINMAP// 标记为 GAINMAP 层);// 第三步分解——单层 HDR 拆成 BASE GAINMAP // hdrPixelMap 是单层 ALTERNATE 类型的 HDR 图nativePix.hdrDecompose(dualPixelMap,gainmapPixelMap,this.hdrPixelMap);this.dualLayerMapdualPixelMap;// 展示 BASE 层this.gainmapPixelMapgainmapPixelMap;// 展示 GAINMAP 层// 第四步合成——BASE GAINMAP 重新合成单层 HDR // 目标格式YCBCR_P010YUV 10bit 格式另一种 HDR 格式letopts:image.InitializationOptions{editable:true,pixelFormat:image.PixelMapFormat.YCBCR_P010,size:{height:this.inputHeight,width:this.inputWidth}};letoutPutPixelMapimage.createPixelMapSync(opts);// 合成结果BT2020_HLG 色彩空间ALTERNATE 类型letcolorSpaceHlgcolorSpaceManager.create(colorSpaceManager.ColorSpace.BT2020_HLG);outPutPixelMap.setColorSpace(colorSpaceHlg);outPutPixelMap.setMetadata(image.HdrMetadataKey.HDR_METADATA_TYPE,image.HdrMetadataType.ALTERNATE);// 把两层合成回单层 HDRnativePix.hdrCompose(dualPixelMap,gainmapPixelMap,outPutPixelMap);this.pixelMapDstoutPutPixelMap;}HdrMetadataType 四种类型对比类型含义对应场景NONE普通 SDR 图无 HDR 元数据普通图片处理ALTERNATE单层 HDR整图就是 HDRAI 生成的 HDR、直接解码的 HDR 图BASE双层 HDR 的基础 SDR 层hdrDecompose 分解出的主图GAINMAP双层 HDR 的增益图层hdrDecompose 分解出的增益信息像素格式与 HDR 类型对应关系这个对应关系弄错了 Native 接口会报错像素格式每通道位深对应 HDR 类型用途RGBA_88888 bitNONESDR普通图片RGBA_101010210 bitALTERNATEAI 生成 HDRYCBCR_P01010 bit YUVALTERNATEhdrCompose 合成结果RGBA_88888 bitBASE/GAINMAP分解后的 BASE 和增益图StorageLink 串联四个页面的设计思路整个 demo 四个页面通过StorageLink(hdrPixelMap)串联// 四个组件都用同一行声明StorageLink(hdrPixelMap)hdrPixelMap:image.PixelMap|undefinedundefined;// 色彩空间转换页写入this.hdrPixelMapoutPutPixelMap;// 自动同步到所有订阅者// 主页读取按钮动态启用Button(元数据生成).enabled(this.hdrPixelMap!undefined)踩坑记录坑1元数据生成必须在 onAppear 里执行generateMetadata是同步操作要确保hdrPixelMap已经存在来自色彩空间转换页。放在构造函数里不行放在aboutToAppear里时机也不对——推荐放在onAppear这时StorageLink数据已经就绪。坑2hdrDecompose 和 hdrCompose 参数顺序// 分解hdrDecompose(base目标, gainmap目标, 源HDR图)nativePix.hdrDecompose(dualPixelMap,gainmapPixelMap,this.hdrPixelMap);// 合成hdrCompose(base层, gainmap层, 合成目标)nativePix.hdrCompose(dualPixelMap,gainmapPixelMap,outPutPixelMap);两个接口的参数看起来像实际含义不同别搞混。坑3hdrCompose 输出用 YCBCR_P010 而不是 RGBA_1010102这两种格式都是 10 bit HDR但用途不同RGBA_1010102是 RGB 色彩空间YCBCR_P010是 YUV 色彩空间更适合视频和合成输出。在这个 demo 里 hdrCompose 的输出用 YCBCR_P010。写在最后搞清楚 HDR 的双层结构后你会明白为什么 HEIC 格式的图片能做到普通屏显示 SDR、HDR 屏显示 HDR——BASE 层保证了兼容性GAINMAP 层提供了增量信息。这套设计挺精妙的。

相关文章:

HDR 图像的双层结构——元数据生成与 hdrDecompose/hdrCompose 完整解析

文章目录HDR 图到底怎么存的?三个核心操作的关系元数据生成代码详解HDR 分解与合成代码详解HdrMetadataType 四种类型对比像素格式与 HDR 类型对应关系StorageLink 串联四个页面的设计思路踩坑记录写在最后一直以来我以为 HDR 图就是"更亮的图"&#xff0…...

DeepSeek LeetCode 2509.查询树中环的长度 C语言实现

题目分析这道题的关键在于理解完全二叉树的编号规律:节点 val 的父节点是 val / 2(整数除法)。当在两个节点间添加一条边时,形成的环长度等于两节点到其最近公共祖先(LCA)的路径边数之和,再加 1…...

别再死记硬背了!图解MATLAB形态学:用‘膨胀腐蚀’和‘开闭运算’修复破损老照片

用MATLAB形态学魔法修复老照片:从膨胀腐蚀到开闭运算的实战指南 翻开泛黄的相册,那些承载着记忆的老照片往往布满时间的痕迹——划痕、斑点、缺失的角落。作为图像处理领域的瑞士军刀,MATLAB提供了一套强大的形态学工具,能像数字修…...

DeepSeek LeetCode 2509.查询树中环的长度 public int[] cycleLengthQueries(int n, int[][] queries)

这道题的核心是找到两个节点在完全二叉树中的路径长度,然后计算环的长度。关键思路:1. 完全二叉树的节点编号规律:节点 i 的父节点是 i/2 2. 两个节点之间的路径长度 深度差 2 LCA深度差 3. 环的长度 路径长度 1(加回重复的L…...

告别实车测试!手把手教你用Vector VT平台搭建OBC/DCDC的HIL测试环境(附避坑指南)

新能源汽车OBC/DCDC控制器HIL测试环境搭建实战指南 在新能源汽车三电系统开发中,车载充电机(OBC)和DC/DC变换器的功能验证一直是工程师面临的挑战。传统实车测试不仅成本高昂,而且难以覆盖所有边界条件。硬件在环(HIL)测试技术通过将真实控制器接入虚拟车…...

别再死记硬背UML关系了!用4+1视图帮你理清类图、时序图到底画给谁看

别再死记硬背UML关系了!用41视图帮你理清类图、时序图到底画给谁看 在软件工程领域,UML(统一建模语言)是每个开发者都绕不开的话题。但有多少人真正理解这些图形的实际应用场景?我们常常看到这样的现象:团队…...

VSCode Log Viewer插件进阶:除了看syslog,还能这样监控你的Nginx/Docker应用日志

VSCode Log Viewer插件进阶:全栈日志监控实战指南 当你同时维护着系统服务、Web服务器和容器化应用时,日志往往散落在不同角落。每次排查问题都要在多个终端窗口间切换,既低效又容易遗漏关键线索。今天我们就来解锁VSCode Log Viewer插件的高…...

EI会议投稿踩坑记:手把手教你搞定PDF Express字体嵌入和合规邮件(附免费工具)

EI会议投稿实战指南:从PDF字体嵌入到合规邮件的全流程解析 第一次向EI/IEEE会议投稿的研究者,往往会在技术环节遭遇意想不到的阻碍。其中PDF格式合规性问题——尤其是字体未嵌入错误——堪称新手"杀手"。本文将带你深入理解字体嵌入原理&#…...

ComfyUI Manager插件架构优化:5种高效部署方案与性能调优指南

ComfyUI Manager插件架构优化:5种高效部署方案与性能调优指南 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable variou…...

掌握AMD Ryzen硬件调试:SMUDebugTool从入门到精通的完整指南

掌握AMD Ryzen硬件调试:SMUDebugTool从入门到精通的完整指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...

Python 实现电脑垃圾自动清理工具(附完整源码)

最近很多朋友都在问:为什么电脑明明配置不差, 但用久了还是越来越卡?其实很多时候,并不是硬件问题。而是:临时文件过多缓存堆积回收站没清理系统垃圾越来越多于是我用 Python 写了一个:“电脑垃圾自动清理工…...

ESP32-C3 I²S实战:手把手教你驱动ES8311音频编解码器实现回声消除

ESP32-C3与ES8311音频系统实战:从硬件连接到回声消除算法优化 在智能语音交互设备、会议系统和便携式录音设备中,音频处理能力已成为核心需求。ESP32-C3作为一款高性价比的Wi-Fi/BLE双模芯片,其内置的IS接口为音频应用提供了专业级数字音频传…...

Gemini 3.5 Flash 实测报告:快4倍、编程跑分超自家Pro,这6类场景到底该不该换?

Gemini 3.5 Flash 实测报告:快4倍、编程跑分超自家Pro,这6类场景到底该不该换? 问题背景 Google 在 2026 年 5 月发布了 Gemini 3.5 Flash,主打"前沿性能 Flash 价位"。从基准测试数据看,这款模型在编程跑分…...

智慧树刷课插件:如何用自动化工具解放你的学习时间

智慧树刷课插件:如何用自动化工具解放你的学习时间 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 你是否曾经花费大量时间在智慧树平台上手动点击视频、处…...

Blender新手必看:别再乱点右上角那个“漏斗”了,详解大纲视图的4个隐藏开关

Blender新手避坑指南:揭秘大纲视图四大开关的实战应用 刚接触Blender时,界面右上角那个不起眼的漏斗图标就像潘多拉魔盒——点开后出现的四个神秘开关(禁用选中、视图隐藏、视图禁用、渲染禁用)让无数新手陷入选择困难。这些看似简…...

独家披露:Perplexity未公开的政治新闻过滤白名单(含6国政府通报接口绕过逻辑与合规使用边界)

更多请点击: https://kaifayun.com 第一章:Perplexity政治新闻查询的底层机制与合规边界 Perplexity 在处理政治新闻类查询时,并非直接抓取或缓存原始新闻页面,而是依托其混合检索架构——融合实时网络搜索(通过 Bing…...

终极指南:3分钟解决微信网页版无法访问的难题

终极指南:3分钟解决微信网页版无法访问的难题 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为微信网页版无法访问而烦恼吗&#xff…...

RuoYi-Cloud项目导入避坑指南:从Maven配置到依赖下载的完整流程(附常见错误解决)

RuoYi-Cloud项目导入避坑指南:从Maven配置到依赖下载的完整流程 1. 项目准备与环境检查 在开始导入RuoYi-Cloud项目之前,确保你的开发环境已经准备就绪。这个微服务架构项目基于Spring Cloud Alibaba体系,对开发环境有特定要求: 基…...

Perplexity词组搭配查询深度解析(工业级语料验证版):基于127万条真实英文语境的搭配强度阈值模型首次公开

更多请点击: https://codechina.net 第一章:Perplexity词组搭配查询深度解析(工业级语料验证版):基于127万条真实英文语境的搭配强度阈值模型首次公开 Perplexity 不仅是语言模型评估的核心指标,更可转化为…...

告别配置烦恼:一键脚本+环境变量,让你的Mac上Gradle(Homebrew版)和IDEA无缝协作

告别配置烦恼:一键脚本环境变量,让你的Mac上Gradle(Homebrew版)和IDEA无缝协作 作为一名长期在Mac上使用Gradle的开发者,你是否经历过这样的困扰:每次换新机器或升级Gradle版本后,都要手动查找libexec路径,…...

碧蓝航线自动化助手:3小时解放你的游戏时间

碧蓝航线自动化助手:3小时解放你的游戏时间 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 还在为碧蓝航线中重复…...

MounRiver Studio编译优化实战:如何为你的RISC-V项目选择-O0到-O3?

MounRiver Studio编译优化实战:RISC-V项目-O0到-O3的深度选择指南 当你在MounRiver Studio中点击那个小小的"Optimization"下拉框时,是否曾对着-O0、-O1、-O2、-Os、-O3这些选项犹豫不决?作为一位经历过数十个RISC-V项目的老手&am…...

GaussDB密码安全实战:从默认配置到企业级加固的完整操作指南

GaussDB密码安全实战:从默认配置到企业级加固的完整操作指南 接手一套新的GaussDB生产环境时,密码安全往往是DBA最容易忽视却又最致命的薄弱环节。去年某金融企业数据泄露事件的根源,正是由于沿用默认的MD5加密算法导致数万客户凭证被彩虹表破…...

港澳通行证照片怎么手机拍?2026 手机拍摄规格要求和实用方法全解

准备办理港澳通行证却被照片规格搞得不知所措?其实用手机就能拍出符合要求的证件照,关键是掌握正确的拍摄方法和规格标准。这篇文章将详细讲解港澳通行证照片的手机拍摄方法,包括规格要求、拍摄步骤,以及如何后期处理让照片完美达…...

Windows右键菜单终极清理教程:ContextMenuManager免费工具帮你告别臃肿与卡顿

Windows右键菜单终极清理教程:ContextMenuManager免费工具帮你告别臃肿与卡顿 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你的Windows右键菜单是…...

零 Python 依赖!用 JavaCV + ONNX Runtime 把 YOLO 塞进生产环境

上周五快下班的时候,运维老张突然冲进办公室,手里还拎着半杯凉透的枸杞茶。 “兄弟,客户那边又炸了!”他把杯子往桌上一墩,“那个 PCB 缺陷检测系统,Python 推理服务又崩了。这周第三次了,人家产…...

别再死磕论文了!用PyTorch复现StyleGAN,从代码层面理解风格混合与解耦

从零构建StyleGAN:用PyTorch代码揭示风格混合的奥秘 当你在浏览社交媒体时,是否曾被那些由AI生成的逼真虚拟人脸所震撼?这些图像背后往往隐藏着一个强大的生成对抗网络——StyleGAN。与传统的GAN不同,StyleGAN能够精确控制生成图像…...

Windows右键菜单性能优化终极指南:5个步骤彻底解决右键菜单卡顿问题

Windows右键菜单性能优化终极指南:5个步骤彻底解决右键菜单卡顿问题 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾经在Windows系统中遇到这…...

美团/京东/淘宝闪购外卖红包天天领取口令推荐最新发布今日实测有效的外卖红包每天免费领取入口

今日实测有效可领取外卖红包口令是:淘宝APP在闪购外卖下搜索外卖红包领取口令【 188288 】、美团APP搜索外卖红包领取口令是【 188288 】、词令直达美团/京东/淘宝闪购外卖红包领取口令是【 188288 】。作为天天点外卖的上班族,每天下单前先通过推荐的外…...

如何通过智能包装系统提升全链条的数字化与协同效率?

本段聚焦全链条数字化升级的核心路径,通过 智能包装系统实现 原材料到成品的数据共享与流程对齐。以原材料入库、生产、成品出库为主线,建立统一的数据模型、模块化接口与可追溯闭环,推动 协同优化与成本控制。结合 中科天工智能包装设备与 中…...