C#で図形を描く7つの方法を初心者向けに解説

C#で図形を描く初心者向けチュートリアルC#
この記事は約22分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

C#において、図形を描くことは基本的ながらも非常に重要なスキルです。

この記事では、C#を使って図形を描く方法を初心者にも理解しやすい形で詳細に解説します。

プログラミングに不慣れな方でも、この記事を読めば、C#で図形を描く基本から応用までを学べるようになります。

また、各段階でサンプルコードを提供し、そのコードがどのように機能するかを丁寧に説明していきます。

これにより、実際に手を動かしながら学ぶことができます。

この記事を読むことで、C#の基本的な図形描画の技術を身につけ、自分のプロジェクトに応用することができるようになります。

●C#での図形描画の基本

C#で図形を描くためには、基本的な構文と描画に関するクラスの理解が必要です。

C#は.NETフレームワークをベースにしており、図形描画には主にSystem.Drawing名前空間を使用します。

この名前空間には、図形を描画するための多くのクラスとメソッドが含まれています。

たとえば、Graphicsクラスは描画の基本を担い、PenBrushクラスは図形のスタイルや色を定義します。

これらのクラスを組み合わせることで、さまざまな図形を描くことが可能になります。

C#で図形を描く基本的な流れは次の通りです。

  1. 描画する対象のGraphicsオブジェクトを作成します。
  2. PenBrushなどの描画ツールを定義します。
  3. Graphicsオブジェクトのメソッドを使用して、図形を描きます。
  4. 描画が完了したら、リソースを適切に解放します。

○図形描画のためのC#の基本構文

図形を描くためのC#の基本構文を見ていきましょう。

まずは最も単純な形、線を描く例から始めます。

下記のサンプルコードは、C#でウィンドウ上に線を描く基本的な方法を表しています。

using System.Drawing;
using System.Windows.Forms;

public class SimpleDrawing : Form
{
    protected override void OnPaint(PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        g.DrawLine(new Pen(Color.Black), 0, 0, 200, 200);
    }
}

static class Program
{
    static void Main()
    {
        Application.Run(new SimpleDrawing());
    }
}

このコードでは、System.DrawingSystem.Windows.Formsの名前空間を使用しています。

SimpleDrawingクラスはFormクラスを継承しており、そのOnPaintメソッドをオーバーライドしています。

OnPaintメソッド内で、GraphicsオブジェクトのDrawLineメソッドを使用して線を描いています。

ここでは、黒いペンを使用して画面の左上から右下に向かって線を引いています。

この例を実行すると、ウィンドウ内に斜めの線が描かれることを確認できます。

これが、C#で図形を描く最も基本的な形です。

この基本を理解することで、より複雑な図形を描くための土台を築くことができます。

●図形を描く7つの方法

C#を用いて図形を描く方法は多岐にわたります。

ここでは、基本的な7つの方法を紹介します。

これらの方法を理解し、実践することで、さまざまな図形を自由に描くことが可能になります。

初心者でも簡単に取り組めるように、それぞれの方法に対して具体的なサンプルコードとその解説を提供します。

○サンプルコード1:線を描く

C#で線を描く最も基本的な方法は、GraphicsクラスのDrawLineメソッドを使用することです。

下記のサンプルコードは、ウィンドウ上に直線を描く方法を表しています。

using System.Drawing;
using System.Windows.Forms;

public class LineDrawing : Form
{
    protected override void OnPaint(PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        g.DrawLine(new Pen(Color.Black), 10, 10, 100, 100);
    }
}

static class Program
{
    static void Main()
    {
        Application.Run(new LineDrawing());
    }
}

このコードでは、OnPaintメソッド内でGraphicsオブジェクトのDrawLineメソッドを用いて線を描いています。

この例では、始点(10, 10)から終点(100, 100)までの黒い線を描いています。実行すると、ウィンドウ内に斜めの直線が表示されます。

○サンプルコード2:長方形を描く

次に、C#で長方形を描く方法を見ていきます。

GraphicsクラスのDrawRectangleメソッドを使用することで、簡単に長方形を描画できます。

下記のサンプルコードは、長方形を描く一例です。

using System.Drawing;
using System.Windows.Forms;

public class RectangleDrawing : Form
{
    protected override void OnPaint(PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        g.DrawRectangle(new Pen(Color.Blue), 20, 20, 150, 100);
    }
}

static class Program
{
    static void Main()
    {
        Application.Run(new RectangleDrawing());
    }
}

この例では、青色のペンを使用して、位置(20, 20)に幅150、高さ100の長方形を描いています。

このコードを実行すると、指定された位置とサイズの長方形がウィンドウ上に描画されます。

○サンプルコード3:円を描く

C#で円を描く場合は、DrawEllipseメソッドを使用します。

円は実際には楕円として描画され、その幅と高さが等しい場合に円となります。

下記のサンプルコードでは、ウィンドウ上に円を描いています。

using System.Drawing;
using System.Windows.Forms;

public class CircleDrawing : Form
{
    protected override void OnPaint(PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        g.DrawEllipse(new Pen(Color.Green), 30, 30, 100, 100);
    }
}

static class Program
{
    static void Main()
    {
        Application.Run(new CircleDrawing());
    }
}

このコードでは、緑色のペンを用いて、位置(30, 30)に直径100の円を描いています。

DrawEllipseメソッドの四番目と五番目の引数が円の幅と高さで、これらが同じ値の場合、完全な円が描かれます。

このプログラムを実行すると、指定された位置とサイズの円がウィンドウに表示されます。

○サンプルコード4:多角形を描く

C#では、GraphicsクラスのDrawPolygonメソッドを使用して多角形を描画することができます。

下記のサンプルコードは、五角形を描く方法を表しています。

using System.Drawing;
using System.Windows.Forms;

public class PolygonDrawing : Form
{
    protected override void OnPaint(PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        Point[] points = { new Point(50, 50), new Point(100, 25), new Point(150, 50), new Point(125, 100), new Point(75, 100) };
        g.DrawPolygon(new Pen(Color.Red), points);
    }
}

static class Program
{
    static void Main()
    {
        Application.Run(new PolygonDrawing());
    }
}

このコードでは、5つの点を定義し、それらを結んで五角形を描いています。

Point配列に各頂点の座標を設定し、DrawPolygonメソッドに渡しています。

実行すると、赤い線で構成された五角形が描画されます。

○サンプルコード5:曲線を描く

C#で曲線を描画するには、DrawCurveメソッドを使用します。

下記のサンプルコードでは、簡単な曲線を描いています。

using System.Drawing;
using System.Windows.Forms;

public class CurveDrawing : Form
{
    protected override void OnPaint(PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        Point[] points = { new Point(10, 100), new Point(50, 10), new Point(100, 100), new Point(150, 10), new Point(200, 100) };
        g.DrawCurve(new Pen(Color.Green), points);
    }
}

static class Program
{
    static void Main()
    {
        Application.Run(new CurveDrawing());
    }
}

この例では、複数の点を定義し、それらを通る滑らかな曲線を描いています。

各点は曲線の方向を決定します。

このプログラムを実行すると、緑色の曲線がウィンドウに表示されます。

○サンプルコード6:テキストを図形に追加する

C#では、図形にテキストを追加することもできます。

下記のサンプルコードでは、長方形の中にテキストを描画しています。

using System.Drawing;
using System.Windows.Forms;

public class TextInShapeDrawing : Form
{
    protected override void OnPaint(PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        Rectangle rect = new Rectangle(20, 20, 150, 100);
        g.DrawRectangle(new Pen(Color.Blue), rect);
        g.DrawString("Hello, C#!", new Font("Arial", 16), new SolidBrush(Color.Black), rect);
    }
}

static class Program
{
    static void Main()
    {
        Application.Run(new TextInShapeDrawing());
    }
}

このコードでは、まず青色のペンで長方形を描き、その後DrawStringメソッドを使用して長方形の中にテキストを描画しています。

実行すると、長方形の中に「Hello, C#!」というテキストが表示されます。

○サンプルコード7:図形に色をつける

C#で図形に色をつけるには、Fill系のメソッドを使用します。

下記のサンプルコードでは、塗りつぶされた長方形と円を描いています。

using System.Drawing;
using System.Windows.Forms;

public class FilledShapeDrawing : Form
{
    protected override void OnPaint(PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        g.FillRectangle(new SolidBrush(Color.Yellow), 10, 10, 100, 50);
        g.Fill

Ellipse(new SolidBrush(Color.Purple), 120, 10, 100, 100);
    }
}

static class Program
{
    static void Main()
    {
        Application.Run(new FilledShapeDrawing());
    }
}

このコードでは、FillRectangleメソッドとFillEllipseメソッドを使用して、それぞれ黄色の長方形と紫色の円を描いています。

これらのメソッドにはSolidBrushオブジェクトが使用され、図形の内部を指定した色で塗りつぶしています。

実行すると、指定した色と形状の図形がウィンドウに表示されます。

●図形描画の応用例

C#を使用した図形描画の応用例は多岐にわたります。

ここでは、インタラクティブな要素やアニメーション効果を取り入れた図形描画のサンプルコードを紹介します。

これらの例を通じて、C#での図形描画の可能性をさらに広げることができます。

○サンプルコード8:インタラクティブな図形描画

インタラクティブな図形描画では、ユーザーの入力や動作に応じて図形が変化します。

下記のサンプルコードでは、マウスカーソルの位置に応じて円の位置が変わる例を表しています。

using System.Drawing;
using System.Windows.Forms;

public class InteractiveDrawing : Form
{
    public InteractiveDrawing()
    {
        this.MouseMove += new MouseEventHandler(OnMouseMove);
    }

    private void OnMouseMove(object sender, MouseEventArgs e)
    {
        this.Invalidate();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        g.Clear(Color.White);
        g.FillEllipse(new SolidBrush(Color.Blue), this.PointToClient(Cursor.Position).X - 25, this.PointToClient(Cursor.Position).Y - 25, 50, 50);
    }
}

static class Program
{
    static void Main()
    {
        Application.Run(new InteractiveDrawing());
    }
}

このコードでは、MouseMoveイベントを使ってマウスの動きを追跡し、マウスの位置に基づいて円を描画しています。

実行すると、マウスを動かすたびに円がマウスカーソルの位置に描画されます。

○サンプルコード9:アニメーション効果を付けた図形

C#で図形にアニメーション効果を加えることも可能です。

下記のサンプルコードでは、時間の経過に応じて色が変わる円を描画しています。

using System;
using System.Drawing;
using System.Windows.Forms;

public class AnimatedShapeDrawing : Form
{
    private Timer timer;
    private int colorChange = 0;

    public AnimatedShapeDrawing()
    {
        timer = new Timer();
        timer.Interval = 100;
        timer.Tick += new EventHandler(OnTimerTick);
        timer.Start();
    }

    private void OnTimerTick(object sender, EventArgs e)
    {
        colorChange++;
        this.Invalidate();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        g.Clear(Color.White);
        g.FillEllipse(new SolidBrush(Color.FromArgb(colorChange % 256, 0, 0)), 100, 100, 100, 100);
    }
}

static class Program
{
    static void Main()
    {
        Application.Run(new AnimatedShapeDrawing());
    }
}

このコードでは、Timerコンポーネントを使用して一定間隔で円の色を変更しています。

colorChange変数は時間とともに増加し、その値に応じて円の色が変わります。

これにより、円にアニメーション効果が付与されます。

●注意点と対処法

C#を使用して図形を描画する際には、いくつかの一般的な注意点があります。

これらはプログラミング初心者がよく遭遇する問題で、適切な対処法を知ることが重要です。

まず、図形の描画において最も重要なのは、描画するオブジェクトの座標とサイズを正確に設定することです。

これを怠ると、図形が画面上に正しく表示されないか、期待した場所に描画されないことがあります。

また、色やスタイルの設定にも注意が必要です。

特に、色の指定が不正確だと、図形が意図した色と異なる色で表示されることがあります。

○描画エラーへの対処法

C#における図形描画で発生する一般的な描画エラーには、いくつかの典型的な対処法があります。例えば、図形が全く表示されない場合、原因として考えられるのは座標の指定ミスや、描画先のコンテキストが不適切であることです。

これを解決するためには、まず座標の計算を再確認し、Graphicsオブジェクトの状態を確認することが重要です。

もし座標の計算に誤りがない場合は、描画先のコンテキストが適切に設定されているかを確認し、必要に応じてコードを修正します。

また、色や線のスタイルが意図した通りに描画されない場合は、色やペンの設定を見直すことが有効です。

C#では、ColorオブジェクトやPenオブジェクトを使用して色や線のスタイルを設定しますが、これらのオブジェクトのプロパティが正しく設定されていない場合、期待した描画結果が得られないことがあります。

このような場合は、ColorオブジェクトやPenオブジェクトのプロパティを再確認し、正しい値が設定されていることを確かめます。

その他にも、描画中に例外が発生する場合は、プログラムのエラー処理を見直すことが重要です。

C#では、try-catchブロックを使用して例外処理を行うことができます。

例外が発生した場合は、このブロックを使用してエラーの原因を特定し、適切な対応を行います。

例外処理を適切に行うことで、エラーの発生を最小限に抑え、安定した描画処理を実現することができます。

これらの対処法を適用することで、図形描画における一般的なエラーを効果的に解決し、より高品質なプログラムを作成することが可能になります。

初心者にとっては、これらのエラーに遭遇することは学習の一環として重要であり、適切な対処法を身につけることで、C#プログラミングのスキルを向上させることができます。

○パフォーマンス向上のためのヒント

C#における図形描画のパフォーマンスを向上させるためには、いくつかの重要なヒントがあります。

まず、描画処理を最適化するためには、不要な描画を避けることが重要です。

例えば、図形が画面に表示されない領域に描画される場合、その描画処理はパフォーマンスを低下させる原因となります。

このような場合、描画領域を事前に計算し、画面に表示される領域内でのみ描画を行うようにすることが効果的です。

また、描画処理の速度を向上させるためには、描画のためのオブジェクトを再利用することが有効です。

C#では、PenオブジェクトやBrushオブジェクトなど、図形の描画に使用するオブジェクトを生成する際にリソースを消費します。

これらのオブジェクトを都度生成するのではなく、再利用することで、描画処理のパフォーマンスを向上させることができます。

例えば、同じ色やスタイルの線を複数回描画する場合、一度生成したPenオブジェクトを再利用することで、描画処理を高速化することが可能です。

さらに、複雑な図形を描画する場合には、描画処理を分割し、必要に応じて逐次描画することも有効です。

例えば、複雑な曲線を描画する場合には、それをいくつかの短い線分に分割し、それぞれを描画します。

これにより、描画担当のCPUやグラフィックカードの負荷を軽減し、描画速度を向上させることが可能です。

描画メソッドの呼び出し回数を最小限に抑えることもパフォーマンス向上に寄与します。

たとえば、Graphics.DrawLinesメソッドを使用すれば、複数の線分を一度に描画することができます。

●カスタマイズ方法

C#での図形描画では、さまざまなカスタマイズが可能です。

たとえば、図形のサイズや色、境界線の太さなどを調整することができます。

これにより、プログラムの視覚的な魅力を高めることができます。カスタマイズの方法は、使用するプロパティやメソッドによって異なります。

例えば、Pen クラスを使用して線の色や太さを変更したり、Brush クラスを使用して図形の塗りつぶしの色を変更することができます。

これらのクラスは System.Drawing 名前空間に含まれています。

さらに、独自のカスタム図形を作成することも可能です。

これには、基本的な図形を組み合わせたり、独自の描画ロジックを実装することが含まれます。

例えば、星形や複雑な幾何学的パターンを描画することができます。

これらのカスタマイズは、プログラムのクリエイティブな側面を強調し、ユーザーにより魅力的な視覚体験を提供します。

○図形のカスタマイズ例

図形のカスタマイズの一例として、図形のサイズや色を動的に変更する方法があります。

たとえば、ユーザーの入力に応じて図形の大きさを変更するプログラムを作成することができます。

これを実現するには、ユーザーからの入力を取得し、その値を使用して図形のプロパティを更新します。

ここでは、ユーザーの入力に基づいて長方形のサイズを変更するサンプルコードを紹介します。

このコードでは、Console.ReadLine() を使用してユーザーからの入力を取得し、それを int.Parse() で整数に変換しています。

その後、Rectangle オブジェクトのサイズを設定し、Graphics オブジェクトを使用して長方形を描画しています。

using System;
using System.Drawing;

class Program {
    static void Main() {
        Console.WriteLine("長方形の幅を入力してください:");
        int width = int.Parse(Console.ReadLine());
        Console.WriteLine("長方形の高さを入力してください:");
        int height = int.Parse(Console.ReadLine());

        Bitmap bmp = new Bitmap(width, height);
        using (Graphics g = Graphics.FromImage(bmp)) {
            g.DrawRectangle(Pens.Black, 0, 0, width, height);
        }

        bmp.Save("rectangle.png");
        Console.WriteLine("長方形が描画されました: rectangle.png");
    }
}

このコードを実行すると、ユーザーが指定したサイズの長方形が描画され、”rectangle.png” という名前の画像ファイルに保存されます。

○描画スタイルのカスタマイズ

描画スタイルのカスタマイズでは、図形の外観をさらに洗練させることができます。

たとえば、線のスタイルを変更したり、図形にグラデーションを適用したりすることができます。

これにより、より複雑で魅力的なグラフィックスを作成することが可能になります。

ここでは、線のスタイルを変更するサンプルコードを紹介します。

このコードでは、Pen オブジェクトを使用して線の色と太さを設定し、DashStyle プロパティを変更することで線のスタイルをカスタマイズしています。

using System;
using System.Drawing;
using System.Drawing.Drawing2D;

class Program {
    static void Main() {
        Bitmap bmp = new Bitmap(200, 200);
        using (Graphics g = Graphics.FromImage(bmp)) {
            Pen customPen = new Pen(Color.Blue, 3);
            customPen.DashStyle = DashStyle.Dot;
            g.DrawLine(customPen, 10, 10, 190, 190);
        }

        bmp.Save("customLine.png");
        Console.WriteLine("カスタム線が描画されました: customLine.png");
    }
}

このコードを実行すると、青色で点線のスタイルを持つ線が描画され、”customLine.png” という名前の画像ファイルに保存されます。

このように、Pen クラスのプロパティを変更することで、線の見た目を多様に変えることができます。

まとめ

この記事では、C#を使用して図形を描く基本的な方法と、それらを応用したさまざまなカスタマイズ方法について詳しく説明しました。

初心者でも理解しやすいサンプルコードを多数提供し、図形描画の基本から応用までを段階的に解説しました。

特に、C#におけるGraphicsクラスの使用方法や、PenBrushなどのオブジェクトを用いた図形の描画方法に焦点を当てました。

この記事を通じて、C#での図形描画が初心者にも分かりやすく、かつ実践的であることが伝わったことを願っています。

読者がこの知識を活用し、自分のプログラミングスキルをさらに向上させることができれば、これ以上の喜びはありません。