news 2026/5/31 7:13:09

鸿蒙开发-想控制帧率和HDR显示?DisplaySync和hdrCapability怎么用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙开发-想控制帧率和HDR显示?DisplaySync和hdrCapability怎么用

想控制帧率和 HDR 显示?DisplaySync 和 hdrCapability 怎么用

做游戏或者图形应用时,有两个常见的需求:

  1. 控制帧率:游戏在不同场景下需要不同的帧率——菜单界面 30fps 就够了,战斗场景需要 60fps 甚至更高。
  2. HDR 显示:让画面有更高的亮度范围和色彩表现,暗处更暗,亮处更亮。

HarmonyOS 提供了两个 Kit 来处理这些需求:DisplaySync(可变帧率)和hdrCapability(HDR 能力)。

下面是 DisplaySync 帧率控制的整体流程:

displaySync.create 创建实例

setExpectedFrameRateRange 设置帧率范围

on frame 订阅帧回调

回调中获取时间戳

计算 deltaTime

更新游戏逻辑

渲染当前帧

场景切换

动态调整帧率范围

页面退出

off frame 取消订阅

DisplaySync:控制帧率

DisplaySync让你可以指定 UI 自绘制内容的帧率。一般用于自绘制 UI(比如 Canvas 渲染的游戏画面),而不是普通的 ArkUI 组件。

创建 DisplaySync

import{displaySync}from'@kit.ArkGraphics2D';letdisplaySync:displaySync.DisplaySync=displaySync.create();

设置帧率范围

letrange:displaySync.ExpectedFrameRateRange={expected:60,// 期望帧率min:30,// 最低帧率max:120// 最高帧率};displaySync.setExpectedFrameRateRange(range);

三个参数:

  • expected:期望帧率(fps)
  • min:最低帧率(系统会尽量不低于这个值)
  • 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(deviceTemperature>40){displaySync.setExpectedFrameRateRange({expected:30,min:30,max:60});}else{displaySync.setExpectedFrameRateRange({expected:60,min:60,max:120});}

hdrCapability:HDR 能力查询

选择 HDR 格式时,可以参考下面的优先级决策流程:

支持 HDR Vivid

支持 HDR10

支持 HLG

不支持 HDR

支持 AIHDR

需要播放 HDR 内容

设备支持哪种 HDR 格式?

优先使用 HDR Vivid

使用 HDR10

使用 HLG

回退到 SDR

使用 AI HDR 增强

动态元数据 画质最好

静态元数据 兼容性最广

兼容 SDR 设备

AI 将 SDR 转 HDR

HDR(High Dynamic Range,高动态范围)让画面有更广的亮度和色彩范围。普通 SDR 画面的亮度范围是 0-100 nit,HDR 可以达到 1000 nit 甚至更高——阳光更刺眼,阴影更深邃。

hdrCapability模块不提供 HDR 渲染能力,而是提供查询设备支持哪些 HDR 格式的能力。你可以根据设备支持的格式来决定用哪种 HDR 方案。

HDR 格式枚举

import{hdrCapability}from'@kit.ArkGraphics2D';
格式说明
NONE0不支持 HDR
VIDEO_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 格式

HLG(Hybrid Log-Gamma):BBC 和 NHK 联合开发的 HDR 标准,兼容 SDR 设备。适合广播电视。

HDR10:最普及的 HDR 标准,使用静态元数据。大部分 HDR 电视和显示器都支持。

HDR Vivid:华为自研的 HDR 标准,支持动态元数据,效果比 HDR10 更好。在华为设备上优先使用。

AIHDR:AI 增强的 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 图形相关的主要 Kit:

  • ArkGraphics 2D:2D 绘制、图像效果、色彩管理
  • AR Engine:增强现实
  • ArkGraphics 3D + Spatial Recon:3D 场景和 3DGS 渲染
  • XEngine:GPU 加速
  • DisplaySync + hdrCapability:帧率控制和 HDR

希望这些文章能帮你理解 HarmonyOS 的图形能力,做出更棒的应用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 7:05:53

AI如何破解招聘中的认知偏见:从光环效应到公平算法实践

1. 项目概述:当AI成为认知偏见的“纠偏器”在人力资源和招聘领域,我们每天都在与人打交道,而“人”本身就是最复杂的变量。作为一名在科技招聘行业摸爬滚打了十多年的老兵,我见过太多因为面试官的“第一眼感觉”、“气场相合”而错…

作者头像 李华
网站建设 2026/5/31 7:04:53

Python音频处理librosa

""" Python librosa 音频处理详解 包含:音频加载、梅尔频谱图、STFT、MFCC 特征、音高检测、音频可视化 """ import librosa import librosa.display import numpy as np import matplotlib.pyplot as pltdef generate_test_tone(dur…

作者头像 李华