ダブル バッファリングされたグラフィックス

グラフィックスをプログラミングするときは、ちらつきが一般的な問題になります。 複数の複雑な描画操作を必要とするグラフィックス操作を実行すると、描画されたイメージがちらつきなどによって適切に表示されないことがあります。 このような問題に対処するために、.NET Framework では、ダブル バッファリングを利用できます。

ダブル バッファリングでは、メモリ バッファーを使用して、複数の描画操作に関連するちらつきの問題に対処します。 ダブル バッファリングを有効にすると、すべての描画操作が画面上の描画サーフェイスではなく、最初にメモリ バッファーに描画されます。 描画操作がすべて完了すると、メモリ バッファーが、関連付けられている描画サーフェイスに直接コピーされます。 画面上で実行されるグラフィックス操作は 1 つだけなので、複雑な描画操作に関連するイメージのちらつきが解消されます。

既定のダブル バッファリング

アプリケーションでダブル バッファリングを使用するには、.NET Framework に用意されている、フォームやコントロールに対する既定のダブル バッファリングを使用するのが最も簡単です。 DoubleBuffered プロパティを true に設定するか SetStyle メソッドを使用することで、Windows フォームや作成した Windows コントロールに対して既定のダブル バッファリングを有効にできます。 詳細については、「方法: フォームとコントロールのダブル バッファリングを行うことによってグラフィックスのちらつきを軽減する」を参照してください。

バッファリングされたグラフィックスの手動管理

アニメーションや高度なメモリ管理など、より高度なダブル バッファリングのシナリオでは、.NET Framework クラスを使用して独自のダブル バッファリング ロジックを実装できます。 個々のグラフィックス バッファーの割り当てと管理を担当するクラスは BufferedGraphicsContext クラスです。 各アプリケーション ドメインには、そのアプリケーションの既定のダブル バッファリングのすべてを管理する、それぞれ独自の既定の BufferedGraphicsContext インスタンスがあります。 多くの場合、アプリケーションごとに存在するアプリケーション ドメインは 1 つだけなので、通常、アプリケーションごとに 1 つの既定の BufferedGraphicsContext があります。 既定の BufferedGraphicsContext インスタンスは、BufferedGraphicsManager クラスによって管理されます。 既定の BufferedGraphicsContext インスタンスへの参照は、Current を呼び出すことで取得できます。 また、専用の BufferedGraphicsContext インスタンスを作成して、グラフィックス重視のアプリケーションのパフォーマンスを向上させることもできます。 BufferedGraphicsContext インスタンスの作成方法については、「方法: バッファリングされたグラフィックスを手動で管理する」を参照してください。

バッファリングされたグラフィックスの手動表示

BufferedGraphicsContext クラスのインスタンスを使用して、グラフィックス バッファーを作成できます。BufferedGraphicsContext.Allocate を呼び出すことによって、BufferedGraphics クラスのインスタンスが返されます。 BufferedGraphics オブジェクトで、フォームやコントロールなどのレンダリング サーフェイスに関連付けられたメモリ バッファーを管理します。

それがインスタンス化された後、BufferedGraphics クラスで、メモリ内グラフィックス バッファーへのレンダリングを管理します。 Graphics を使用して、メモリ バッファーにグラフィックスをレンダリングできます。これにより、メモリ バッファーを直接表す Graphics オブジェクトが公開されます。 この Graphics オブジェクトには、描画サーフェイスを表す Graphics オブジェクトにする場合と同じように描画できます。 すべてのグラフィックスがバッファーに描画された後、BufferedGraphics.Render を使用して、バッファーの内容を画面上の描画サーフェイスにコピーできます。

BufferedGraphics クラスの使い方の詳細については、「バッファリングされたグラフィックスを手動で描画する」を参照してください。 グラフィックスの描画の詳細については、「Windows フォームにおけるグラフィックスと描画」を参照してください。

関連項目