ダブル バッファリングされたグラフィックス
グラフィックスをプログラミングするときは、ちらつきが一般的な問題になります。 複数の複雑な描画操作を必要とするグラフィックス操作では、レンダリングされたイメージがちらつきを感じるか、それ以外の場合は許容できない外観になる可能性があります。 これらの問題に対処するために、.NET Framework はダブル バッファリングへのアクセスを提供します。
ダブル バッファリングでは、メモリ バッファーを使用して、複数のペイント操作に関連するちらつきの問題に対処します。 ダブル バッファリングを有効にすると、すべてのペイント操作が、画面上の描画サーフェイスではなくメモリ バッファーに最初にレンダリングされます。 すべてのペイント操作が完了すると、メモリ バッファーがそれに関連付けられている描画サーフェイスに直接コピーされます。 画面上で実行されるグラフィックス操作は 1 つだけなので、複雑な描画操作に関連する画像のちらつきは解消されます。
既定のダブル バッファリング
アプリケーションでダブル バッファリングを使用する最も簡単な方法は、.NET Framework によって提供されるフォームとコントロールに既定のダブル バッファリングを使用することです。 DoubleBuffered プロパティを true
に設定するか、SetStyle メソッドを使用して、Windows フォームおよび作成された Windows コントロールの既定のダブル バッファリングを有効にすることができます。 詳細については、「方法: フォームとコントロールのダブル バッファリングを使用してグラフィックスのちらつきを減らすを参照してください。
バッファリングされたグラフィックスを手動で管理する
アニメーションや高度なメモリ管理などのより高度なダブル バッファリング シナリオでは、.NET Framework クラスを使用して独自のダブル バッファリング ロジックを実装できます。 個々のグラフィックス バッファーの割り当てと管理を担当するクラスは、BufferedGraphicsContext クラスです。 すべてのアプリケーション ドメインには、そのアプリケーションのすべての既定のダブル バッファリングを管理する独自の既定の BufferedGraphicsContext インスタンスがあります。 ほとんどの場合、アプリケーションごとに 1 つのアプリケーション ドメインしか存在しないため、通常、アプリケーションごとに既定の BufferedGraphicsContext が 1 つあります。 既定の BufferedGraphicsContext インスタンスは、BufferedGraphicsManager クラスによって管理されます。 Currentを呼び出すことで、既定の BufferedGraphicsContext インスタンスへの参照を取得できます。 また、専用の BufferedGraphicsContext インスタンスを作成して、グラフィカルに集中的なアプリケーションのパフォーマンスを向上させることもできます。 BufferedGraphicsContext インスタンスを作成する方法については、「方法: バッファリングされたグラフィックスを手動で管理する」を参照してください。
バッファリングされたグラフィックスを手動で表示する
BufferedGraphicsContext クラスのインスタンスを使用して、BufferedGraphics クラスのインスタンスを返す BufferedGraphicsContext.Allocateを呼び出すことによってグラフィックス バッファーを作成できます。 BufferedGraphics オブジェクトは、フォームやコントロールなどのレンダリング サーフェイスに関連付けられているメモリ バッファーを管理します。
インスタンス化された後、BufferedGraphics クラスはメモリ内グラフィックス バッファーへのレンダリングを管理します。 メモリ バッファーにグラフィックスをレンダリングするには、メモリ バッファーを直接表す Graphics オブジェクトを公開する Graphicsを使用します。 描画サーフェイスを表す Graphics オブジェクトと同様に、この Graphics オブジェクトにペイントできます。 すべてのグラフィックスがバッファーに描画されたら、BufferedGraphics.Render を使用して、バッファーの内容を画面上の描画サーフェイスにコピーできます。
関連項目
.NET Desktop feedback