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

いろいろな模様(ハッチスタイル)で塗りつぶす

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

HatchBrushオブジェクトをブラシに使用することにより、さまざまな模様(ハッチスタイル)で塗りつぶすことが出来ます。

下のコードはHatchBrushで可能なすべての模様で塗りつぶしています。いったいどのような模様があるのか、確かめてみましょう。

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)

'フォントオブジェクトの作成
Dim fnt As New Font("Arial", 8)

'塗りつぶす範囲
Dim rect As New Rectangle(0, 0, 120, 30)

'HatchStyle列挙体のすべての値で塗りつぶす
Dim name As String
For Each name In [Enum].GetNames(GetType(HatchStyle))
    '名前からHatchStyleの値を取得
    Dim hs As HatchStyle = _
        CType([Enum].Parse(GetType(HatchStyle), name), HatchStyle)
    'HatchBrushオブジェクトの作成
    Dim myBrush As New HatchBrush(hs, Color.Black, Color.White)
    '四角を塗りつぶす
    g.FillRectangle(myBrush, rect)
    'HatchStyleの名前を表示
    g.DrawString(name, fnt, Brushes.Black, rect.Left, rect.Bottom + 2)
    'HatchBrushを破棄
    myBrush.Dispose()

    '塗りつぶす次の位置を計算
    If rect.Y < 550 Then
        rect.Y += rect.Height + CInt(fnt.GetHeight(g)) + 10
    Else
        rect.X += rect.Width + 10
        rect.Y = 0
    End If
Next name

'リソースを解放する
fnt.Dispose()
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);

//フォントオブジェクトの作成
Font fnt = new Font("Arial", 8);

//塗りつぶす範囲
Rectangle rect = new Rectangle(0, 0, 120, 30);

//HatchStyle列挙体のすべての値で塗りつぶす
foreach (string name in Enum.GetNames(typeof(HatchStyle)))
{
    //名前からHatchStyleの値を取得
    HatchStyle hs = (HatchStyle) Enum.Parse(typeof(HatchStyle), name);
    //HatchBrushオブジェクトの作成
    HatchBrush myBrush = new HatchBrush(hs, Color.Black, Color.White);
    //四角を塗りつぶす
    g.FillRectangle(myBrush, rect);
    //HatchStyleの名前を表示
    g.DrawString(name, fnt, Brushes.Black, rect.Left, rect.Bottom + 2);
    //HatchBrushを破棄
    myBrush.Dispose();

    //塗りつぶす次の位置を計算
    if (rect.Y < 550)
        rect.Y += rect.Height + (int) fnt.GetHeight(g) + 10;
    else
    {
        rect.X += rect.Width + 10;
        rect.Y = 0;
    }
}

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

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

このHatchStyle列挙体のメンバの中で、「Min」と「Horizonal」は同じです。ヘルプによると、「Max」は「SolidDiamond」と同じとなっていますが、実際には「Max」と「Cross」が同じようです。さらに「Cross」と「LargeGrid」が同じなので、結局「Max」と「Cross」と「LargeGrid」がすべて同じようです。(.NET Framework 1.1現在)

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

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

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