我是否在 WinApi 中正确执行动画
Am I performing properly an animation in WinApi?
我有一个显示动画GIF图像的小应用程序。GIF 帧将另存为 HBITMAP。我只是通过设置计时器并在窗口过程中发生事件时使用 bitblt 函数来执行动画WM_TIMER。尽管计时器设置为适当的延迟,但我的 GIF 动画比浏览器中同一文件的动画略慢。所以问题是,是否有比使用计时器完成工作更好的方法,或者问题出在代码中?
WM_TIMER的准确性由 Windows 时钟中断率和 UI 线程的响应能力决定。 默认情况下,时钟每秒滴答作响 64 次,每 15.625 毫秒一次。 计时器永远不会比这更准确。 或者换句话说,如果你要求,比如说,10毫秒,那么你不会收到WM_TIMER消息,直到15.625毫秒过去。 同样,如果您要求 16 毫秒,则在 2 x 15.625 = 31.250 毫秒过去之前不会收到消息。
GIF 格式以 10 毫秒为单位指定帧的动画时间。 因此,这本身就足以使您的动画花费比预期更长的时间。
您可以通过调用 timeBeginPeriod() 来更改WM_TIMER准确性。 要求 10 个周期是合乎逻辑的选择。 完成后调用 timeEndPeriod()。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在没有信号的情况下从C++执行QML插槽
- 如何确认我的constexpr表达式实际上已经在编译时执行
- C++17中的并行执行策略
- QML按钮点击功能执行顺序
- 程序在执行程序的其余部分之前退出
- 为什么catch中的代码没有被执行
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 将执行、作业和WinAPI相乘
- 如何使用在 Cocos2d 中执行存储的动画
- 如何实现程序动画(在调试器中逐步/单步执行)?(例如,在VSC 中)
- 我是否在 WinApi 中正确执行动画