オフスクリーン描画

お次は、オフスクリーン描画である。
Form上に画像を描く場合、Paintイベントハンドラを実装する。


private void onFormAhoPaint(object sender, PaintEventArgs e)
{
e.Graphics.(適当に画像を描くメソッド);
}
ただ、このままだと表示メモリに直接描くことになり、描画のタイミングと画面のリフレッシュの周期が合わず、画面にピラピラと線が走る。
ティアリングである。
(この表記はモダンなOSでは正確ではないのだが、面倒なのでこう説明しておく)
これを避けるために、オフスクリーンバッファを準備してそちらに描画をしたあと、一気に表示メモリに転送する。

private void onFormAhoPaint(object sender, PaintEventArgs e)
{
Bitmap bmpOffscreen = new Bitmap(ClientRectangle.Width, ClientRectangle.Height);
Graphics gfxOffscreen = Graphics.FromImage(bmpOffscreen);
gfxOffscreen.(適当に画像を描くメソッド);
e.Graphics.DrawImage(bmpOffscreen, 0, 0, ClientRectangle, GraphicsUnit.Pixel);
gfxOffscreen.Dispose();
}