ブラシオブジェクトの概要
.NETでのWindowsフォームグラフィックシステムの基本は、ペンオブジェクト(System.Drawing.Pen)とブラシオブジェクト(System.Drawing.Brushから派生するクラス)です。直線や曲線を描くときはペンオブジェクトを、テキストや直線や曲線に囲まれた領域を塗りつぶすときにはブラシオブジェクトを使用しなくてはなりません。
ペンはブラシと関連しますので、まずはブラシの解説からします。ブラシは以下のものが.NET Frameworkに用意されています。
- SolidBrush:最も単純なブラシの形式です。単色で描画します
- HatchBrush:SolidBrush に似ていますが、単色以外にも、あらかじめ用意された多様な描画パターンから選択できます
- TextureBrush:イメージなどのテクスチャを使用して描画します
- LinearGradientBrush:2色間のグラデーションで描画します
- PathGradientBrush:開発者によって定義された一意のパスに基づいて、ディザカラーの複雑なグラデーションを使用して描画します
本記事では、このうち比較的簡単なSolidBrush
、HatchBrush
、LinearGradientBrush
の3つのオブジェクトを取り扱います。
ブラシを理解するには、実際に描画するプログラミングをするのが1番です。各種ブラシを使用して指定した領域を塗りつぶすサンプルプロジェクトBrushSampleを用意しましたので見てください。
//重要な部分だけ抜粋 public partial class Form1 : Form { private void Draw() { //塗りつぶしに使用するブラスを作成 System.Drawing.Brush brush = null; switch ( ( Brush ) this.BrushList.SelectedIndex ) { case Brush.SolidBrush: brush = new SolidBrush( this.ForeColorBox.BackColor ); break; case Brush.HatchBrush: brush = new HatchBrush( ( HatchStyle ) this.StyleList.SelectedItem, this.ForeColorBox.BackColor, this.BackColorBox.BackColor ); break; case Brush.LinerGradientBrush: RectangleF rectl = new RectangleF( 0, 0, 10, 10 ); LinearGradientBrush lbrush = new LinearGradientBrush( rectl, this.ForeColorBox.BackColor, this.BackColorBox.BackColor, LinearGradientMode.ForwardDiagonal ); lbrush.SetBlendTriangularShape( 0.33f ); lbrush.WrapMode = WrapMode.TileFlipXY; brush = lbrush; break; } //塗りつぶし領域を設定 float x = this.DrawRegion.Location.X; float y = this.DrawRegion.Location.Y; float width = this.DrawRegion.Width - 1; float height = this.DrawRegion.Height - 1; RectangleF rect = new RectangleF( x, y, width, height ); //指定したブラシで塗りつぶす Graphics grfx = this.CreateGraphics(); grfx.FillRectangle( brush, rect ); } }
このサンプルでは、コンボボックスコントロールで選択したブラシに基づいて、あらかじめ定めた四角形の領域を塗りつぶしています。重要なのは、描画位置を設定する部分とブラシを作成する部分です。描画位置は1ピクセルずれることを考慮し、Width
とHeight
の値から1を引かねばなりません。これでブラシの基本的な機能についての解説は終わりです。
次項ではペンオブジェクトについて解説します。