DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DOBON.NET

長方形、多角形、楕円、円弧、扇形を描く

補足:画像の表示方法が分からない、描画した絵が消えて困るなどという方は、まず「画像ファイルを表示する」をご覧ください。また、Penオブジェクトについては、「線を描く」をご覧ください。

長方形(矩形)の描画

長方形を描画するには、Graphics.DrawRectangleメソッドを使います。次の例では、位置(10, 20)に100x 80の長方形を、幅1の黒色の線で、ピクチャボックス(PictureBox1)に描画しています。

[VB.NET]
'Graphicsオブジェクトの作成
Dim g As Graphics = PictureBox1.CreateGraphics()
'Penオブジェクトの作成(幅1の黒色)
'(この場合はPenを作成せずに、Pens.Blackを使っても良い)
Dim p As New Pen(Color.Black, 1)
'(10,20,100,80)の長方形を描く
g.DrawRectangle(p, 10, 20, 100, 80)
'リソースを開放する
p.Dispose()
g.Dispose()
[C#]
//Graphicsオブジェクトの作成
Graphics g = PictureBox1.CreateGraphics();
//Penオブジェクトの作成(幅1の黒色)
//(この場合はPenを作成せずに、Pens.Blackを使っても良い)
Pen p = new Pen(Color.Black, 1);
//(10,20,100,80)の長方形を描く
g.DrawRectangle(p, 10, 20, 100, 80);
//リソースを開放する
p.Dispose();
g.Dispose();

複数の長方形の描画

たくさんの長方形をいっぺんに描くには、DrawRectanglesメソッドを使用します。

[VB.NET]
'Graphicsオブジェクトの作成
Dim g As Graphics = PictureBox1.CreateGraphics()
'Penオブジェクトの作成(幅1の黒色)
'(この場合はPenを作成せずに、Pens.Blackを使っても良い)
Dim p As New Pen(Color.Black, 1)
'3つの長方形の位置と大きさを配列に入れる
Dim recst As Rectangle() = _
    {New Rectangle(0, 0, 40, 20), New Rectangle(10, 5, 20, 50), _
    New Rectangle(5, 10, 50, 40)}
'(10,20,100,80)の長方形を描く
g.DrawRectangles(p, recst)
'リソースを開放する
p.Dispose()
g.Dispose()
[C#]
//Graphicsオブジェクトの作成
Graphics g = PictureBox1.CreateGraphics();
//Penオブジェクトの作成(幅1の黒色)
//(この場合はPenを作成せずに、Pens.Blackを使っても良い)
Pen p = new Pen(Color.Black, 1);
//3つの長方形の位置と大きさを配列に入れる
Rectangle[] recst = {new Rectangle(0, 0, 40, 20), 
                        new Rectangle(10, 5, 20, 50), 
                        new Rectangle(5, 10, 50, 40)};
//(10,20,100,80)の長方形を描く
g.DrawRectangles(p, recst);
//リソースを開放する
p.Dispose();
g.Dispose();

多角形の描画

次に多角形を描いてみましょう。多角形を描くには、DrawPolygonメソッドを使います。

[VB.NET]
'Graphicsオブジェクトの作成
Dim g As Graphics = PictureBox1.CreateGraphics()
'直線で接続する点の配列を作成
Dim ps As Point() = {New Point(0, 0), New Point(150, 50), _
    New Point(80, 100), New Point(100, 150)}
'折れ線を引く
g.DrawPolygon(Pens.Black, ps)
'リソースを開放する
g.Dispose()
[C#]
//Graphicsオブジェクトの作成
Graphics g = PictureBox1.CreateGraphics();
//直線で接続する点の配列を作成
Point[] ps = {new Point(0, 0), new Point(150, 50), 
                    new Point(80, 100), new Point(100, 150)};
//折れ線を引く
g.DrawPolygon(Pens.Black, ps);
//リソースを開放する
g.Dispose();

楕円の描画

続いては楕円です。楕円(円)の描画にはDrawEllipseメソッドを使うと簡単です。楕円の位置と大きさは、外接する四角の位置と大きさで指定します。次の例では位置(10, 20)大きさ100x80の四角に外接する楕円を描画しています。

[VB.NET]
'Graphicsオブジェクトの作成
Dim g As Graphics = PictureBox1.CreateGraphics()
'位置(10, 20)に100x80の四角を赤色で描く
g.DrawRectangle(Pens.Red, 10, 20, 100, 80)
'先に描いた四角に外接する楕円を黒で描く
g.DrawEllipse(Pens.Black, 10, 20, 100, 80)
'リソースを開放する
g.Dispose()
[C#]
//Graphicsオブジェクトの作成
Graphics g = PictureBox1.CreateGraphics();
//位置(10, 20)に100x80の四角を赤色で描く
g.DrawRectangle(Pens.Red, 10, 20, 100, 80);
//先に描いた四角に外接する楕円を黒で描く
g.DrawEllipse(Pens.Black, 10, 20, 100, 80);
//リソースを開放する
g.Dispose();

円弧の描画

円弧の描画には、DrawArcメソッドを使います。円弧は楕円の一部として表示されます。楕円の位置と大きさは上のDrawEllipseメソッドと同様に外接する四角の位置と大きさで指定し、切り取る範囲は開始角度(X座標方向が0度)とスイープ角度(右回り)により指定します。

次の例では、上と同じ位置(10, 20)大きさ100x80の四角に外接する楕円の、開始角度0度、スイープ角度90度の部分を描画しています。

[VB.NET]
'Graphicsオブジェクトの作成
Dim g As Graphics = PictureBox1.CreateGraphics()
'位置(10, 20)に100x80の四角を赤色で描く
g.DrawRectangle(Pens.Red, 10, 20, 100, 80)
'先に描いた四角に外接する楕円の一部
'(開始角度 0度、スイープ角度 90度)を黒で描く
g.DrawArc(Pens.Black, 10, 20, 100, 80, 0, 90)
'リソースを開放する
g.Dispose()
[C#]
//Graphicsオブジェクトの作成
Graphics g = PictureBox1.CreateGraphics();
//位置(10, 20)に100x80の四角を赤色で描く
g.DrawRectangle(Pens.Red, 10, 20, 100, 80);
//先に描いた四角に外接する楕円の一部
//(開始角度 0度、スイープ角度 90度)を黒で描く
g.DrawArc(Pens.Black, 10, 20, 100, 80, 0, 90);
//リソースを開放する
g.Dispose();

扇形の描画

最後に扇形です。扇形の描画はDrawPieメソッドを使いますが、使い方はDrawArcメソッドと全く同じです。次の例は上記のDrawArcメソッドのコードの"DrawArc"を"DrawPie"に変更しただけのものです。

[VB.NET]
'Graphicsオブジェクトの作成
Dim g As Graphics = PictureBox1.CreateGraphics()
'位置(10, 20)に100x80の四角を赤色で描く
g.DrawRectangle(Pens.Red, 10, 20, 100, 80)
'先に描いた四角に外接する楕円の一部の扇形
'(開始角度 0度、スイープ角度 90度)を黒で描く
g.DrawPie(Pens.Black, 10, 20, 100, 80, 0, 90)
'リソースを開放する
g.Dispose()
[C#]
//Graphicsオブジェクトの作成
Graphics g = PictureBox1.CreateGraphics();
//位置(10, 20)に100x80の四角を赤色で描く
g.DrawRectangle(Pens.Red, 10, 20, 100, 80);
//先に描いた四角に外接する楕円の一部の扇形
//(開始角度 0度、スイープ角度 90度)を黒で描く
g.DrawPie(Pens.Black, 10, 20, 100, 80, 0, 90);
//リソースを開放する
g.Dispose();

内部を塗りつぶした図形の描画

内部を塗りつぶした図形の描画法はこちらで説明しています。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。