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

パスを使って図形を描く

注意:画像の表示方法が分からないという方は、まず「コントロールやフォームに画像を表示する」をご覧ください。また、Penクラスについては、「線を描く」をご覧ください。

線や図形を描く方法は「線を描く」「曲線を描く」「長方形、多角形、楕円、円弧、扇形を描く」「文字を描く」などで説明しましたが、これら以外にも線や図形を描く方法があります。それがパス(GraphicsPathオブジェクト)を使い、Graphics.DrawPathメソッドで描画する方法です。

パスはいろいろな線や図形(サブパス)から構成されています。「線を描く」「曲線を描く」「長方形、多角形、楕円、円弧、扇形を描く」「文字を描く」で紹介したほぼすべての図形をパスに追加できます。実際にGraphicsPathオブジェクトに図形を追加するには、"Add???"という名前のメソッドを使います。"Add???"メソッドは、Graphicsクラスのメソッド"Draw???"と対応しており、"Draw???"の使い方を知っていれば"Add???"も簡単に理解できるでしょう。

Graphicsのメソッド GraphicsPathのメソッド 説明
DrawArc AddArc 楕円の円弧
DrawBezier AddBezier ベジエ曲線
DrawBeziers AddBeziers ベジエ曲線のシーケンス
DrawClosedCurve AddClosedCurve 閉じたカーディナル スプライン曲線
DrawCurve AddCurve カーディナル スプライン曲線
DrawEllipse AddEllipse 楕円
DrawLine AddLine 直線
DrawLines AddLines 一連の直線
DrawPath AddPath パス
DrawPie AddPie 扇形
DrawPolygon AddPolygon 多角形
DrawRectangle AddRectangle 四角形
DrawRectangles AddRectangles 一連の四角形
DrawString AddString 文字列

次にGraphicsPathオブジェクトに図形を追加し、そのパスをGraphics.DrawPathメソッドで描画する例を示します。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing
'Imports System.Drawing.Drawing2D

'描画先とするImageオブジェクトを作成する
Dim canvas As New Bitmap(PictureBox1.Width, PictureBox1.Height)
'ImageオブジェクトのGraphicsオブジェクトを作成する
Dim g As Graphics = Graphics.FromImage(canvas)

'GraphicsPathオブジェクトの作成
Dim myPath As New GraphicsPath

'新しい図形を開始する
myPath.StartFigure()
'直線を2本追加する
myPath.AddLine(0, 0, 50, 50)
myPath.AddLine(100, 0, 150, 50)
'図形を閉じる
myPath.CloseFigure()

'新しい図形を開始する
myPath.StartFigure()
'直線を2本追加する
myPath.AddLine(0, 60, 50, 110)
myPath.AddLine(100, 60, 150, 110)

'新しい図形を開始する
myPath.StartFigure()
'直線を追加する
myPath.AddLine(100, 120, 150, 170)
'新しい図形を開始する
myPath.StartFigure()
'直線を追加する
myPath.AddLine(0, 120, 50, 170)

'四角を2つ追加する
myPath.AddRectangle(New Rectangle(160, 10, 60, 80))
myPath.AddRectangle(New Rectangle(160, 100, 60, 60))

'パス図形を描画する
g.DrawPath(Pens.Black, myPath)

'リソースを解放する
g.Dispose()

'PictureBox1に表示する
PictureBox1.Image = canvas
C#
コードを隠すコードを選択
//using System.Drawing;
//using System.Drawing.Drawing2D;

//描画先とするImageオブジェクトを作成する
Bitmap canvas = new Bitmap(PictureBox1.Width, PictureBox1.Height);
//ImageオブジェクトのGraphicsオブジェクトを作成する
Graphics g = Graphics.FromImage(canvas);

//GraphicsPathオブジェクトの作成
GraphicsPath myPath = new GraphicsPath();

//新しい図形を開始する
myPath.StartFigure();
//直線を2本追加する
myPath.AddLine(0, 0, 50, 50);
myPath.AddLine(100, 0, 150, 50);
//図形を閉じる
myPath.CloseFigure();

//新しい図形を開始する
myPath.StartFigure();
//直線を2本追加する
myPath.AddLine(0, 60, 50, 110);
myPath.AddLine(100, 60, 150, 110);

//新しい図形を開始する
myPath.StartFigure();
//直線を追加する
myPath.AddLine(100, 120, 150, 170);
//新しい図形を開始する
myPath.StartFigure();
//直線を追加する
myPath.AddLine(0, 120, 50, 170);

//四角を2つ追加する
myPath.AddRectangle(new Rectangle(160, 10, 60, 80));
myPath.AddRectangle(new Rectangle(160, 100, 60, 60));

//パス図形を描画する
g.DrawPath(Pens.Black, myPath);

//リソースを解放する
g.Dispose();

//PictureBox1に表示する
PictureBox1.Image = canvas;

  • 履歴:
  • 2012/8/3 表示する方法を、PictureBox.Imageプロパティを使った方法に変更。

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

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。