アニメーション GIF 画像を表示する小さなアプリケーションがあります。GIF フレームは HBITMAP として保存されます。ウィンドウプロシージャで WM_TIMER イベントが発生したときに、タイマーを設定して bitblt 関数を使用するだけで、簡単にアニメーションを実行できます。また、タイマーは適切な遅延に設定されていますが、私の GIF アニメーションは、ブラウザ内の同じファイルのアニメーションよりもわずかに遅くなります。問題は、タイマーを使用して仕事をするよりも良い方法があるか、それとも問題がコードにあるのかということです。
質問する
386 次
1 に答える
1
WM_TIMER の精度は、Windows クロックの割り込みレートと UI スレッドの応答性によって決まります。デフォルトでは、クロックは 1 秒あたり 64 回、15.625 ミリ秒ごとに 1 回刻みます。タイマーはそれより正確になることはありません。つまり、たとえば 10 ミリ秒を要求すると、15.625 ミリ秒が経過するまで WM_TIMER メッセージは表示されません。同様に、16 ミリ秒を要求すると、2 x 15.625 = 31.250 ミリ秒が経過するまでメッセージが表示されません。
GIF 形式では、フレームのアニメーション時間を 10 ミリ秒単位で指定します。そのため、それだけでアニメーションが意図したよりも長くなるのに十分です。
timeBeginPeriod() を呼び出すことで、WM_TIMER の精度を変更できます。10 のピリオドを要求することは、論理的な選択です。完了したら timeEndPeriod() を呼び出します。
于 2013-10-02T17:13:03.443 に答える