C# exercises (6) Graphics and Paint

Graphicsオブジェクト

ウインドウの内部を表示したり描き直したりする必要が生ずると、Formに「Paint」というイベントが発生し、Paintプロパティに設定されているメソッドが呼び出されるようになっています。

このPaintイベント用のメソッドは、これまでのクリック時のイベント用メソッドなどとは微妙に違いがあります。これは以下のように定義されます。

private void メソッド名 (object sender, PaintEventArgs e)
{
    ……ここに描画処理を書く……
}

第1引数に、イベントが発生したオブジェクトが渡されるのは同じですが、第2引数に渡されるのはSystem.Windows.Formsパッケージの「PaintEventArgs」というクラスのインスタンスです。これは、描画のためのイベント情報を管理するもので、描画に必要なオブジェクトなどもこの中にまとめられているのです。
中でも重要なのが「Graphics」というオブジェクトです。これはSystem.Drawingパッケージに用意されているクラスで、これはGDI+(Graphics Device Interfaceというグラフィック描画のための機能の強化版)を利用して画面にさまざまな描画を行うための機能を提供します。

Paintイベント

フォームのプロパティをイベントに切り替えて、Paintイベントを探し、メソッド名Form1Paintを入力

スクリーンショット 2016-05-27 11.31.11

Paintイベントで渡されるPaintEventArgsインスタンスから以下のようにして取り出します。

Graphics 変数 = 《PaintEventArgs》.Graphics;

Penと図形の描画

  • g.DrawLine(p,75,75,50,50);  // 直線
  • g.DrawEllipse(p,75,75,50,50);  // 円
private void Form1Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    Pen p = new Pen(Color.Red); // Penインスタンスの作成
    g.DrawEllipse(p,75,75,50,50);
}

Penと多角形を描く

private void Form1Paint(object sender, PaintEventArgs e)
{
 Graphics g = e.Graphics;
 Pen p = new Pen(Color.Red); // Penインスタンスの作成
 Brush b = new SolidBrush(Color.Blue); // Brushインスタンスの作成

 //直線で接続する点の配列を作成
 Point[] ps = {new Point(100, 0),
     new Point(158, 180),
     new Point(4, 69),
     new

Point(195,

 69),
     new Point(41, 180)};
 //多角形を描画する
 g.DrawPolygon(p, ps);
}

 

Brushと塗りつぶし図形

private void Form1Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    Brush b = new SolidBrush(Color.Blue); // Brushインスタンスの作成
    g.DrawEllipse(p,75,75,50,50);
}

実例

using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace MyFrmApp
{
    public class MyForm : Form
    {
             
        public MyForm()
        {
            this.Width = 300;
            this.Height = 200;
            this.Paint += myframe_paint;
        }
             
        private void Form1Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Pen p = new Pen(Color.Red); // Penインスタンスの作成
            Brush b = new SolidBrush(Color.Blue); // Brushインスタンスの作成
            g.FillRectangle(b,50,50,50,50);
            g.DrawEllipse(p,75,75,50,50);


            //直線で接続する点の配列を作成
            Point[] ps = {new Point(0, 0),
            new Point(150, 50),
            new Point(80, 100),
            new Point(100, 150)};
            //多角形を描画する
            g.DrawPolygon(p, ps);
        }
    }
}

スクリーンショット 2016-05-27 11.29.37

演習

五芒星を描く

220px-Pentagram.svg

star

***

五芒星(ごぼうせい、英: pentagram)または五芒星形・五角形・型・型五角形・正5/2角形は、互いに交差する、長さの等しい5本の線分から構成される図形で型正多角形の一種である。 正五角形に内接し、対称的である。 一筆書きが可能。

 

middle_1310314010

Pentacle_2.svg

 参考

  • http://qiita.com/tomato360/items/a59f2ee4df4fd2f24227