注意:画像の表示方法が分からないという方は、まず「コントロールやフォームに画像を表示する」をご覧ください。また、塗りつぶした図形の描画法については、「塗りつぶした図形を描く」をご覧ください。
HatchBrushオブジェクトをブラシに使用することにより、さまざまな模様(ハッチスタイル)で塗りつぶすことが出来ます。
下のコードはHatchBrushで可能なすべての模様で塗りつぶしています。いったいどのような模様があるのか、確かめてみましょう。
'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
//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現在)