gpt4 book ai didi

c++ - 我是否在 WinApi 中正确执行动画?

转载 作者:太空宇宙 更新时间:2023-11-04 11:48:36 25 4
gpt4 key购买 nike

我有一个显示动画 GIF 图像的小应用程序。 GIF 帧保存为 HBITMAP。当窗口过程中发生 WM_TIMER 事件时,我通过设置计时器并使用 bitblt 函数来简单地执行动画。虽然计时器设置为适当的延迟,但我的 GIF 动画比浏览器中同一文件的动画要慢一些。所以问题是,是否有比使用计时器更好的方法来完成这项工作,或者问题出在代码上?

最佳答案

WM_TIMER 的准确性取决于 Windows 时钟中断率和 UI 线程的响应能力。默认情况下,时钟每秒滴答 64 次,每 15.625 毫秒一次。计时器永远不会比这更准确。或者换句话说,如果您要求,比如说,10 毫秒,那么在 15.625 毫秒过去之前,您不会收到 WM_TIMER 消息。类似地,如果您请求 16 毫秒,那么在 2 x 15.625 = 31.250 毫秒过去之前您不会收到消息。

GIF 格式以 10 毫秒为单位指定帧的动画时间。因此,这本身就足以让您的动画花费比预期更长的时间。

您可以通过调用 timeBeginPeriod() 来更改 WM_TIMER 的准确性。要求周期为 10 是合乎逻辑的选择。完成后调用 timeEndPeriod()。

关于c++ - 我是否在 WinApi 中正确执行动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19140105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com