
想控制帧率和 HDR 显示DisplaySync 和 hdrCapability 怎么用做游戏或者图形应用时有两个常见的需求控制帧率游戏在不同场景下需要不同的帧率——菜单界面 30fps 就够了战斗场景需要 60fps 甚至更高。HDR 显示让画面有更高的亮度范围和色彩表现暗处更暗亮处更亮。HarmonyOS 提供了两个 Kit 来处理这些需求DisplaySync可变帧率和hdrCapabilityHDR 能力。下面是 DisplaySync 帧率控制的整体流程displaySync.create 创建实例setExpectedFrameRateRange 设置帧率范围on frame 订阅帧回调回调中获取时间戳计算 deltaTime更新游戏逻辑渲染当前帧场景切换动态调整帧率范围页面退出off frame 取消订阅DisplaySync控制帧率DisplaySync让你可以指定 UI 自绘制内容的帧率。一般用于自绘制 UI比如 Canvas 渲染的游戏画面而不是普通的 ArkUI 组件。创建 DisplaySyncimport{displaySync}fromkit.ArkGraphics2D;letdisplaySync:displaySync.DisplaySyncdisplaySync.create();设置帧率范围letrange:displaySync.ExpectedFrameRateRange{expected:60,// 期望帧率min:30,// 最低帧率max:120// 最高帧率};displaySync.setExpectedFrameRateRange(range);三个参数expected期望帧率fpsmin最低帧率系统会尽量不低于这个值max最高帧率系统不会超过这个值为什么要设范围而不是精确值因为系统需要根据设备性能、温度、电量等因素动态调整。你告诉系统我期望 60fps但最低能接受 30系统就会在这个范围内尽量满足你。订阅帧回调displaySync.on(frame,(frameInfo:displaySync.IntervalInfo){// frameInfo.timestamp当前帧到达的时间纳秒// frameInfo.targetTimestamp下一帧预期到达的时间纳秒// 在这里更新游戏状态、渲染画面this.updateGameLogic();this.renderFrame();});// 启动回调displaySync.on(frame,callback);IntervalInfo提供了两个时间戳timestamp当前帧的时间targetTimestamp下一帧的预期时间你可以用这两个时间戳来计算帧间隔deltaTime实现平滑的动画和物理模拟letdeltaTime(frameInfo.targetTimestamp-frameInfo.timestamp)/1e9;// 转成秒this.moveCharacter(deltaTime);停止帧回调displaySync.off(frame);实际应用场景游戏主循环// 战斗场景高帧率displaySync.setExpectedFrameRateRange({expected:120,min:60,max:120});// 菜单界面低帧率省电displaySync.setExpectedFrameRateRange({expected:30,min:30,max:60});// 过场动画固定帧率displaySync.setExpectedFrameRateRange({expected:24,min:24,max:24});动态调整// 根据设备温度动态调整if(deviceTemperature40){displaySync.setExpectedFrameRateRange({expected:30,min:30,max:60});}else{displaySync.setExpectedFrameRateRange({expected:60,min:60,max:120});}hdrCapabilityHDR 能力查询选择 HDR 格式时可以参考下面的优先级决策流程支持 HDR Vivid支持 HDR10支持 HLG不支持 HDR支持 AIHDR需要播放 HDR 内容设备支持哪种 HDR 格式?优先使用 HDR Vivid使用 HDR10使用 HLG回退到 SDR使用 AI HDR 增强动态元数据 画质最好静态元数据 兼容性最广兼容 SDR 设备AI 将 SDR 转 HDRHDRHigh Dynamic Range高动态范围让画面有更广的亮度和色彩范围。普通 SDR 画面的亮度范围是 0-100 nitHDR 可以达到 1000 nit 甚至更高——阳光更刺眼阴影更深邃。hdrCapability模块不提供 HDR 渲染能力而是提供查询设备支持哪些 HDR 格式的能力。你可以根据设备支持的格式来决定用哪种 HDR 方案。HDR 格式枚举import{hdrCapability}fromkit.ArkGraphics2D;格式值说明NONE0不支持 HDRVIDEO_HLG1视频 HLG 格式VIDEO_HDR102视频 HDR10 格式VIDEO_HDR_VIVID3视频 HDR Vivid 格式华为自研IMAGE_HDR_VIVID_DUAL4图片 HDR Vivid双 JPEG 存储IMAGE_HDR_VIVID_SINGLE5图片 HDR Vivid单 HEIF 存储IMAGE_HDR_ISO_DUAL6图片 HDR ISO双 JPEG 存储IMAGE_HDR_ISO_SINGLE7图片 HDR ISO单 HEIF 存储VIDEO_AIHDR8视频 AI HDR 格式API 24常见的 HDR 格式HLGHybrid Log-GammaBBC 和 NHK 联合开发的 HDR 标准兼容 SDR 设备。适合广播电视。HDR10最普及的 HDR 标准使用静态元数据。大部分 HDR 电视和显示器都支持。HDR Vivid华为自研的 HDR 标准支持动态元数据效果比 HDR10 更好。在华为设备上优先使用。AIHDRAI 增强的 HDR通过 AI 算法把 SDR 内容转换成 HDR 效果。如何使用你一般不会直接调用hdrCapability的 API而是在播放视频或显示图片时根据设备支持的格式来选择内容// 伪代码选择最佳 HDR 格式if(deviceSupports(VIDEO_HDR_VIVID)){playHDRVividVideo();}elseif(deviceSupports(VIDEO_HDR10)){playHDR10Video();}elseif(deviceSupports(VIDEO_HLG)){playHLGVideo();}else{playSDRVideo();}小结Kit功能用途DisplaySync帧率控制游戏主循环、动态帧率调整hdrCapabilityHDR 格式查询选择最佳 HDR 播放方案DisplaySync通过setExpectedFrameRateRange设置帧率范围通过on(frame)订阅帧回调。hdrCapability提供 HDR 格式枚举用于查询设备支持的 HDR 能力。到这里我们已经覆盖了 HarmonyOS 图形相关的主要 KitArkGraphics 2D2D 绘制、图像效果、色彩管理AR Engine增强现实ArkGraphics 3D Spatial Recon3D 场景和 3DGS 渲染XEngineGPU 加速DisplaySync hdrCapability帧率控制和 HDR希望这些文章能帮你理解 HarmonyOS 的图形能力做出更棒的应用。