ダウンロード サンプルファイル(C#) (185.1 KB)
ダウンロード サンプルファイル(VB) (202.7 KB)
ブラシオブジェクトの概要
.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を引かねばなりません。これでブラシの基本的な機能についての解説は終わりです。
次項ではペンオブジェクトについて解説します。
この記事は参考になりましたか?
- 仮想ネットワークの実装で学ぶTCP/IP連載記事一覧
-
- 仮想ネットワーク実装でTCP/IPを学ぼう(7) ― GDI+と独自プロトコルの定義
- 仮想ネットワーク実装でTCP/IPを学ぼう(6) ― セキュリティの基礎と仮想ネットワーク...
- 仮想ネットワーク実装でTCP/IPを学ぼう(5) ― アプリケーション層の勘所
- この記事の著者
-
インドリ(インドリ)
分析・設計・実装なんでもありのフリーエンジニア。ブログ「無差別に技術をついばむ鳥(http://indori.blog32.fc2.com/)」の作者です。アドバイザーをしたり、システム開発したり、情報処理技術を研究したりと色々しています。座右の銘は温故知新で、新旧関係なく必要だと考えたものは全て学...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
