WisdomSoft - for your serial experiences.

2.12 クリッピング

クリッピングは Region オブジェクトを用いて、指定した領域の描画が無効になる(ピクセルを上書きできない)ように、描画領域を限定する機能です。

2.12.1 描画領域を限定する

図形を描画するときに、ウィンドウ全体に描画するわけではなく、特定の領域にしか図形を描画しないような場合、描画領域を固定することができます。これをクリッピングと呼びます。クリッピングを利用した方が誤った座標に描画してしまう可能性がなくなり、また描画速度が向上する可能性があります。

描画領域の設定は Graphics クラスの Clip プロパティで設定することができます。

Graphics クラス Clip プロパティ
public Region Clip {get; set;}

Clip は Region オブジェクトによる描画領域です。この Region が定義する領域を出力対象とします。Draw や Fill 系メソッドで図形を描画しても、この Clip で定義されている領域の外には何も描画されません。単純に描画領域を限定する以外に、複雑な図形や模様を描画する手段としても利用することができます。

コード1
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

public class Test : Form
{
	protected override void OnPaint(PaintEventArgs e) 
	{
		base.OnPaint(e);
		GraphicsPath path = new GraphicsPath();
		path.AddEllipse(110, 10, 200, 150);

		Rectangle rect = new Rectangle(10, 60, 400, 50);
		Region region = new Region(rect);
		region.Xor(path);

		e.Graphics.Clip = region;
		Pen pen = new Pen(Color.Black);
		for(int i = 0 ; i < 80 ; i++) 
		{
			e.Graphics.DrawLine(pen, i * 5, 0, i * 5, 200);
		}
	}
	static void Main() 
	{
		Application.Run(new Test());
	}
}
実行結果
コード1 実行結果

コード1は、クリッピングする領域を定義するために Region オブジェクトを作成し、これを Clip プロパティに設定しています。デフォルトではウィンドウ内であればどこにでも図形を描画できましたが、このプログラムではリージョンが定義している領域の中にしか線が描画されていません。

このテクニックは、例えば画像の一部を複雑な形状で描画させたい場合など、ゲームの特殊な演出でも利用することができます。