図形の描画
図形を描画するには、Draw系のメソッド(DrawEllipse
など)もしくはFill系のメソッド(FillEllipse
など)を使用します。Draw系のメソッドは輪郭を描画し、Fill系のメソッドは指定された領域内を塗りつぶします。直線や曲線を指定すればいろいろな図形が描画できますが、.NET Frameworkには円や多角形を描画するための便利なメソッドが用意されているので、今回はそれを解説します。
円を描画したい場合には、DrawEllipse
もしくはFillEllipse
を使用し、多角形を描画したい場合はDrawPolygon
もしくはFillPolygon
メソッドを使用します。DrawEllipse
メソッドとFillEllipse
メソッドの仕様を示したサンプルプロジェクトEllipseSampleを用意しましたので、それを用いて解説します。
//重要な部分だけ抜粋 public partial class Form1 : Form { private void Form1_Paint( object sender, PaintEventArgs e ) { //描画する間隔 float addX = 10; float addY = 10; //円を描画 Graphics grfx = e.Graphics; Pen pen = new Pen( Color.Red ); pen.Width = 10; RectangleF drawRect = new RectangleF( addX + pen.Width, addY + pen.Width, ( this.ClientSize.Width / 2 ) - ( pen.Width * 2 ) - addX - 1, this.ClientSize.Height - ( pen.Width * 2 ) - ( addY * 2 ) - 1 ); grfx.DrawEllipse( pen, drawRect ); //塗りつぶした円を描画(極力左の円に合わす) SolidBrush brush = new SolidBrush( Color.Black ); RectangleF fillRect = new RectangleF( drawRect.Left + drawRect.Width + pen.Width + addX, addY + ( pen.Width / 2 ), ( this.ClientSize.Width / 2 ) - ( addX * 2 ) - ( pen.Width / 2 ) - 1, this.ClientSize.Height - ( addY * 2 ) - ( pen.Width / 2 ) - 1 ); grfx.FillEllipse( brush, fillRect ); } }
![サンプル実行画面](http://cz-cdn.shoeisha.jp/static/images/article/5170/ElipseSample.gif)
このサンプルは、画面半分の左側に円の輪郭を描画し、水際に塗りつぶした円を描画しています。この2つの図形はフォームのサイズに合わして描画するようにしています。DrawEllipse
メソッドとFillEllipse
メソッドはともに、描画領域(このサンプルではSystem.Drawing.RectangleF
構造体で指定)と描画方法(ペンもしくはブラシ)を指定するようになっています。描画領域は、開始地点のX座標とY座標および、幅と高さで表されています。両メソッドは、複数の引数を受け取るオーバーロードが用意されていますが、ひとまずサンプルが使用している引数のメソッドの使い方を覚えると分かりやすくてよいと思います。
注意してほしいのは、DrawEllipse
メソッドとFillEllipse
メソッドに渡している幅と高さの値が違う点です。これは、「Draw系メソッドとFill系メソッドでは描画される図形のサイズが異なる」からです。そのため、このサンプルでは、なるべく両方の図形のサイズを合わせるために幅と高さの計算式を変えています。しかし、もしかしたらドット単位ではサイズが異なるかもしれません。両メソッドは描画される図形のサイズが異なりますので、十分に注意してください。