2025年4月16日水曜日

C# の Color 構造体

 C# の Color 構造体は、色を表現するために定義されている型です。どの名前空間の Color 構造体について知りたいかによって、若干定義と使い方が異なりますが、一般的には以下のいずれかを指していることが多いです。

  1. System.Drawing.Color 構造体 (Windows Forms, GDI+ などで使用)
  2. System.Windows.Media.Color 構造体 (WPF で使用)

ここでは、より一般的な System.Drawing.Color 構造体を中心に解説し、必要に応じて System.Windows.Media.Color 構造体との違いにも触れます。

System.Drawing.Color 構造体の定義

System.Drawing.Color 構造体は、色を構成する要素(赤、緑、青、アルファ)や、よく使われる定義済みの色などを保持しています。主なメンバーは以下の通りです。

  • プロパティ:

    • A (Byte): アルファ成分 (透明度)。0 (完全に透明) から 255 (完全に不透明) の値を持ちます。
    • R (Byte): 赤成分。0 から 255 の値を持ちます。
    • G (Byte): 緑成分。0 から 255 の値を持ちます。
    • B (Byte): 青成分。0 から 255 の値を持ちます。
    • IsKnownColor (Boolean): この ColorKnownColor 列挙体の定義済み色であるかどうかを示す値を取得します。
    • IsEmpty (Boolean): この Color 構造体が初期化されていないかどうかを示す値を取得します。
    • IsNamedColor (Boolean): この Color が名前付きの色 (例: "Red", "Blue") であるかどうかを示す値を取得します。
    • Name (String): この Color の名前を取得します (定義済み色の場合)。
  • 静的プロパティ (定義済みの色):

    Color.Red, Color.Blue, Color.Green, Color.Black, Color.White など、よく使われる色が静的なプロパティとして定義されています。

  • 静的メソッド:

    • FromArgb(int): ARGB 値 (32 ビット整数) から新しい Color 構造体を作成します。
    • FromArgb(int, int, int): 指定された赤、緑、青の成分 (アルファは既定値の 255) から新しい Color 構造体を作成します。
    • FromArgb(int, int, int, int): 指定されたアルファ、赤、緑、青の成分から新しい Color 構造体を作成します。
    • FromName(string): 指定された名前の色から新しい Color 構造体を作成します (例: Color.FromName("Yellow"))。
    • FromKnownColor(KnownColor): KnownColor 列挙体の値から新しい Color 構造体を作成します。

System.Windows.Media.Color 構造体の定義 (WPF)

System.Windows.Media.Color 構造体も基本的な役割は同じですが、名前空間が異なり、いくつかの点で System.Drawing.Color と異なります。

  • プロパティ:
    • A (Byte): アルファ成分。
    • R (Byte): 赤成分。
    • G (Byte): 緑成分。
    • B (Byte): 青成分。
  • 静的プロパティ (定義済みの色): Colors.Red, Colors.Blue, Colors.Green, Colors.Black, Colors.White など、Colors クラスの静的プロパティとして定義されています。
  • 静的メソッド:
    • FromArgb(byte, byte, byte, byte): アルファ、赤、緑、青の成分から新しい Color 構造体を作成します。
    • FromRgb(byte, byte, byte): 赤、緑、青の成分 (アルファは既定値の 255) から新しい Color 構造体を作成します。
    • FromScRgb(float, float, float, float): ScRGB 値 (0.0 から 1.0 の浮動小数点数) から新しい Color 構造体を作成します。

Color 構造体の使い方

Color 構造体は、主に以下のような場面で使用されます。

  • 描画処理: 図形やテキストの色を指定する際に使用します (例: ペンの色、ブラシの色、背景色など)。
  • UI デザイン: ユーザーインターフェース要素の色を設定する際に使用します (例: ボタンの色、テキストの色など)。

具体的な使用例 (System.Drawing.Color を想定)

  1. 定義済みの色を使用する:

    C#
    using System.Drawing;
    
    public class Example
    {
        public static void Main(string[] args)
        {
            Color redColor = Color.Red;
            Color blueColor = Color.Blue;
            Color backgroundColor = Color.White;
    
            Console.WriteLine($"Red: R={redColor.R}, G={redColor.G}, B={redColor.B}, A={redColor.A}");
            Console.WriteLine($"Blue: R={blueColor.R}, G={blueColor.G}, B={blueColor.B}, A={blueColor.A}");
            Console.WriteLine($"Background: R={backgroundColor.R}, G={backgroundColor.G}, B={backgroundColor.B}, A={backgroundColor.A}");
        }
    }
    
  2. RGB 値を指定して色を作成する:

    C#
    using System.Drawing;
    
    public class Example
    {
        public static void Main(string[] args)
        {
            // 赤成分 255、緑成分 128、青成分 0 のオレンジ色
            Color orangeColor = Color.FromArgb(255, 128, 0);
            Console.WriteLine($"Orange: R={orangeColor.R}, G={orangeColor.G}, B={orangeColor.B}, A={orangeColor.A}");
        }
    }
    
  3. ARGB 値を指定して色を作成する (透明度を含む):

    C#
    using System.Drawing;
    
    public class Example
    {
        public static void Main(string[] args)
        {
            // 半透明の青色 (アルファ値 128)
            Color translucentBlue = Color.FromArgb(128, 0, 0, 255);
            Console.WriteLine($"Translucent Blue: R={translucentBlue.R}, G={translucentBlue.G}, B={translucentBlue.B}, A={translucentBlue.A}");
        }
    }
    
  4. 色の名前から色を作成する:

    C#
    using System.Drawing;
    
    public class Example
    {
        public static void Main(string[] args)
        {
            Color yellowColor = Color.FromName("Yellow");
            Console.WriteLine($"Yellow: R={yellowColor.R}, G={yellowColor.G}, B={yellowColor.B}, A={yellowColor.A}");
        }
    }
    
  5. グラフィック処理での使用例 (Windows Forms):

    C#
    using System.Drawing;
    using System.Windows.Forms;
    
    public class MyForm : Form
    {
        public MyForm()
        {
            this.Text = "Color Example";
            this.Paint += new PaintEventHandler(MyForm_Paint);
        }
    
        private void MyForm_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            SolidBrush redBrush = new SolidBrush(Color.Red);
            g.FillRectangle(redBrush, 10, 10, 100, 50); // 赤色の四角形を描画
    
            Pen bluePen = new Pen(Color.Blue, 3);
            g.DrawEllipse(bluePen, 120, 10, 80, 50); // 青色の円を描画
        }
    
        public static void Main(string[] args)
        {
            Application.Run(new MyForm());
        }
    }
    

System.Windows.Media.Color の使用例 (WPF)

WPF で Color を使用する場合も基本的な考え方は同じですが、名前空間が System.Windows.Media になり、定義済みの色は Colors クラスからアクセスします。

C#
using System.Windows.Media;

public class WpfExample
{
    public static void Main(string[] args)
    {
        Color redColor = Colors.Red;
        Color greenColor = Color.FromRgb(0, 255, 0); // RGB で作成
        Color translucentYellow = Color.FromArgb(128, 255, 255, 0); // ARGB で作成

        Console.WriteLine($"Red (WPF): R={redColor.R}, G={redColor.G}, B={redColor.B}, A={redColor.A}");
        Console.WriteLine($"Green (WPF): R={greenColor.R}, G={greenColor.G}, B={greenColor.B}, A={greenColor.A}");
        Console.WriteLine($"Translucent Yellow (WPF): R={translucentYellow.R}, G={translucentYellow.G}, B={translucentYellow.B}, A={translucentYellow.A}");
    }
}

どちらの Color 構造体を使うべきか

使用するテクノロジーによって、適切な Color 構造体が異なります。

  • Windows Forms や GDI+ を使用している場合: System.Drawing.Color を使用します。
  • WPF を使用している場合: System.Windows.Media.Color を使用します。

これらの違いを理解し、使用している環境に合わせて適切な Color 構造体を利用してください。

0 件のコメント:

コメントを投稿