2

私はC#/ WinFormsでアニメーションアプリを書いています(この質問を参照してください)。基本的に、私のアプリケーションのアニメーションはスムーズですが、引き裂き効果を示しています。同じアニメーションを取得してAVIファイルにレンダリングし、Windows Media Playerで再生すると、アニメーションにティアリング効果がまったく表示されません。アニメーションが音楽と同期しているため、WMPがフレームレートを変更していないことはわかっています。

WMPは、モニターのリフレッシュレートやスキャンラインの位置などを認識するDirectXまたはその他のテクノロジを使用していると思いますが、リフレッシュレートにプログラミングすると、フレームレートが制限されると常に想定していました。明らかに、これはWMPには当てはまりません。

WMP(または他のビデオプレーヤー)がビデオを内部でレンダリングする方法について誰かが知っていますか?検索しましたが、詳細がわかりません。

4

2 に答える 2

5

DirectX プログラミングを行ってからしばらく経っているので、これは古くなっている可能性があります。

私の記憶では、DirectX を使用すると、通常は 3 つのバッファー (表示されるバッファー、表示されるバッファー、書き込まれるバッファー) のフリッピング チェーンをセットアップできます。更新時に、DirectX は表示されたバッファを更新する前に V-sync を待ちます。これにより、表示される画像と表示されるべき画像との間に不一致が生じますが、これは最大で 1 回の更新、約 1/60 秒であるため、気付くことはほとんどありません。

私が何を意味するかを示すいくつかの ASCII アート:

|-|-|-|-|-|-|-|-|-|-|-|-|-|-|  - screen refresh
|----|----|----|----|----|---  - animation 
|-----|---|-----|---|-----|--  - displayed
于 2010-03-16T17:15:14.250 に答える
1

アニメーションの各フレームを最初にメモリ ビットマップにペイントしてから、ビットマップをウィンドウにブリットしていますか? そうでない場合は、これが解決策になる可能性があります。

(もちろん、これはダブルバッファリングに加えて)

于 2010-03-16T16:56:11.580 に答える