WisdomSoft - for your serial experiences.

2.4 塗りつぶす

図形内を指定した色で塗りつぶす方法を解説します。

2.4.1 閉じた図形

Graphics クラスの Draw から始まるメソッドは単純な線を引いたり、閉じた図形の外周を線で描画するメソッドでしたが、これに対して閉じた図形の内部を塗りつぶす Fill から始まるメソッドがあります。

図1 Draw系メソッドとFill系メソッド
図1 Draw系メソッドとFill系メソッド

Fill 系メソッドの名前は、閉じた図形を描画する Draw 系メソッドと対になっています。例えば、矩形を塗りつぶすには FillRectangle()、楕円を塗りつぶすには FillEllipse()、扇形を塗りつぶすには FillPie() メソッドを使います。DrawRectangle() メソッドに対して FillRectangle() メソッド、DrawEllipse() メソッドに対して FillEllipse() メソッド、DrawPie() メソッドに対して FillPie() メソッドという形になっています。描画される図形は、図の輪郭だけを線でなぞるか、図の内部を塗りつぶすかの違いだけです。

Graphics クラス FillRectangle() メソッド
public void FillRectangle(Brush brush, int x, int y, int width, int height)
Graphics クラス FillEllipse() メソッド
public void FillEllipse(Brush brush, int x, int y, int width, int height)
Graphics クラス FillPie() メソッド
public void FillPie(Brush brush, int x, int y, int width, int height, int startAngle, int sweepAngle);

これらのメソッドの使い方は、先頭の brush パラメータを除けば Draw 系メソッドと使い方は同じです。

最初の brush パラメータに注目してください。Fill 系メソッドは Draw 系メソッドの Pen オブジェクトの代わりに System.Drawing.Brush クラスのオブジェクトを使います。Brush クラスはブラシと呼ばれる図形の内部を塗りつぶす情報を提供します。Brush クラス自身は抽象クラスで、すべてのブラシのルートクラスとなります。

この場では、最も基本的な System.Drawing.SolidBrush クラスを使って塗りつぶしを行います。このクラスは、指定した色で図形の内部を塗りつぶす単色ブラシです。

System.Drawing.SolidBrush クラス
System.Object
    System.MarshalByRefObject
        System.Drawing.Brush
            System.Drawing.SolidBrush
public sealed class SolidBrush : Brush

このクラスのコンストラクタには、図形内部を塗りつぶす色を表す Color オブジェクトを指定します。

SolidBrush クラスのコンストラクタ
public SolidBrush(Color color)

color パラメータに塗りつぶす色を設定します。これで、Blush オブジェクトを生成することができます。

FillEllipse() や FillPie() メソッドも、Draw 系のメソッドの Pen オブジェクトを受ける引数が Blush オブジェクトを受けるという点を除けばまったく同じです。

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

public class Test : Form
{
	protected override void OnPaint(PaintEventArgs e) 
	{
		base.OnPaint(e);
		Brush brush = new SolidBrush(Color.Black);
		e.Graphics.FillRectangle(brush, 10, 10, 200, 200);
		e.Graphics.FillEllipse(brush, 220, 10, 200, 200);
		e.Graphics.FillPie(brush, 110, 210, 200, 200, -45, 270);
	}
	static void Main() 
	{
		Application.Run(new Test());
	}
}
実行結果
コード1 実行結果

コード1では、new SolidBrush(Color.Black) で、黒色で塗りつぶすブラシオブジェクトを作成しています。その後の Fill 系メソッドによる描画でこのブラシを使っているため図形は黒で塗りつぶされます。SolidBrush に設定する Color オブジェクトを変更すれば、塗りつぶす色を変えることができます。