SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

仮想ネットワークの実装で学ぶTCP/IP

仮想ネットワーク実装でTCP/IPを学ぼう(7)
― GDI+と独自プロトコルの定義

仮想ネットワーク実装でTCP/IPを学ぼう(7)


  • X ポスト
  • このエントリーをはてなブックマークに追加

ブラシオブジェクトの概要

 .NETでのWindowsフォームグラフィックシステムの基本は、ペンオブジェクト(System.Drawing.Pen)とブラシオブジェクト(System.Drawing.Brushから派生するクラス)です。直線や曲線を描くときはペンオブジェクトを、テキストや直線や曲線に囲まれた領域を塗りつぶすときにはブラシオブジェクトを使用しなくてはなりません。

 ペンはブラシと関連しますので、まずはブラシの解説からします。ブラシは以下のものが.NET Frameworkに用意されています。

  • SolidBrush:最も単純なブラシの形式です。単色で描画します
  • HatchBrush:SolidBrush に似ていますが、単色以外にも、あらかじめ用意された多様な描画パターンから選択できます
  • TextureBrush:イメージなどのテクスチャを使用して描画します
  • LinearGradientBrush:2色間のグラデーションで描画します
  • PathGradientBrush:開発者によって定義された一意のパスに基づいて、ディザカラーの複雑なグラデーションを使用して描画します

 本記事では、このうち比較的簡単なSolidBrushHatchBrushLinearGradientBrushの3つのオブジェクトを取り扱います。

 ブラシを理解するには、実際に描画するプログラミングをするのが1番です。各種ブラシを使用して指定した領域を塗りつぶすサンプルプロジェクトBrushSampleを用意しましたので見てください。

各種ブラシを使用して指定した領域を塗りつぶすサンプル(C#)
//重要な部分だけ抜粋
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ピクセルずれることを考慮し、WidthHeightの値から1を引かねばなりません。これでブラシの基本的な機能についての解説は終わりです。

 次項ではペンオブジェクトについて解説します。

次のページ
ペンオブジェクトの概要

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
仮想ネットワークの実装で学ぶTCP/IP連載記事一覧

もっと読む

この記事の著者

インドリ(インドリ)

分析・設計・実装なんでもありのフリーエンジニア。ブログ「無差別に技術をついばむ鳥(http://indori.blog32.fc2.com/)」の作者です。アドバイザーをしたり、システム開発したり、情報処理技術を研究したりと色々しています。座右の銘は温故知新で、新旧関係なく必要だと考えたものは全て学...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5170 2010/06/17 10:35

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング