C#の色指定を完全解説|Color・RGB/ARGB・16進数・名前付き色の使い方

はじめに

C#で画面の背景色や文字色、図形の塗りつぶし色、画像のピクセル色などを扱うときに欠かせないのが「色指定」です。C#では、Color.Redのような名前付き色、Color.FromArgb(255, 0, 0)のようなRGB指定、透明度を含むARGB指定、#FF0000のような16進数カラーコードなど、さまざまな方法で色を表現できます。

ただし、C#の色指定は開発するアプリの種類によって使う型や名前空間が異なります。Windows FormsではSystem.Drawing.Color、WPFではSystem.Windows.Media.Color、.NET MAUIではMicrosoft.Maui.Graphics.Colorを使うなど、同じ「Color」でも完全に同じものではありません。

この記事では、C#の色指定について、Color・RGB・ARGB・16進数・名前付き色の基本から、Windows Forms、WPF、コンソールアプリ、.NET MAUI、画像処理での実用例までわかりやすく解説します。

1. C#で色を指定する基本

1-1. C#で扱う「色」とは何か

C#で扱う「色」とは、主に赤・緑・青の成分を数値で表したものです。コンピューター上の色は、多くの場合、Red、Green、Blueの3要素を組み合わせて表現します。これがRGBです。

たとえば、赤は次のように表せます。

C#
R = 255
G = 0
B = 0

緑は次のようになります。

C#
R = 0
G = 255
B = 0

青は次のようになります。

C#
R = 0
G = 0
B = 255

さらに、透明度を表すAlphaを加えるとARGBになります。C#では、色を単なる文字列ではなく、Colorという型の値として扱うことが多いです。

1-2. Colorクラス・構造体の役割

C#で色を扱うときによく使われるのがColorです。ただし、Colorは開発環境によって所属する名前空間が異なります。

Windows FormsやGDI+系の処理では、主にSystem.Drawing.Colorを使います。System.Drawing.Color.FromArgbは、アルファ、赤、緑、青の各成分からColor構造体を作成するメソッドです。各成分は8ビット、つまり0〜255の範囲で扱われます。

WPFではSystem.Windows.Media.Colorを使います。WPFのColor.FromArgbもAlpha、Red、Green、Blueを指定でき、FromRgbを使うとアルファ値は既定で255、つまり完全不透明になります。

.NET MAUIではMicrosoft.Maui.Graphics.Colorを使います。.NET MAUIのColorはRGB、HSL、HSV、色名、アルファチャンネルによる透明度を扱えます。

1-3. 色指定でよく使う名前空間

C#で色を指定するときによく使う名前空間は次のとおりです。

C#
using System.Drawing;

Windows Formsや一部の画像処理で使います。

C#
using System.Windows.Media;

WPFで使います。

C#
using Microsoft.Maui.Graphics;

.NET MAUIで使います。

同じColorという名前でも、System.Drawing.ColorSystem.Windows.Media.Colorは別の型です。そのため、複数のUI技術をまたいでコードを書く場合は、どのColorを使っているのかを意識する必要があります。

1-4. RGB・ARGB・16進数・名前付き色の違い

C#の色指定には、主に次のような方法があります。

RGBは、赤・緑・青の3つの数値で色を指定する方法です。

C#
Color color = Color.FromArgb(255, 0, 0);

ARGBは、透明度を表すAを加えて色を指定する方法です。

C#
Color color = Color.FromArgb(128, 255, 0, 0);

16進数カラーコードは、Webやデザインツールでよく使われる形式です。

C#
Color color = ColorTranslator.FromHtml("#FF0000");

名前付き色は、RedBlueのように色名で指定する方法です。

C#
Color color = Color.Red;

手軽さを重視するなら名前付き色、正確に色を合わせたいならRGBや16進数、透明度まで扱うならARGBが便利です。

1-5. 開発環境によって色指定の方法が異なる理由

C#は、Windows Forms、WPF、ASP.NET、Unity、.NET MAUI、コンソールアプリなど、さまざまな環境で使われます。それぞれ描画の仕組みやUIフレームワークが異なるため、色を表す型も異なります。

たとえば、Windows FormsではコントロールのBackColorForeColorSystem.Drawing.Colorを設定します。一方、WPFではBackgroundForegroundBrushを設定することが多く、その中でSystem.Windows.Media.Colorを使います。

また、System.Drawing.Commonは.NET 6以降、Windows以外のOSではサポート対象外になっています。クロスプラットフォームで画像処理を行う場合は、System.Drawingに依存しすぎない設計が重要です。

2. C#のColorを使った基本的な色指定

2-1. System.Drawing.Colorとは

System.Drawing.Colorは、Windows FormsやGDI+系の描画、画像処理などで使われる色を表す構造体です。名前付き色、RGB、ARGB、システム色などを扱えます。

基本的には次のように使います。

C#
using System.Drawing;

Color red = Color.Red;
Color blue = Color.Blue;
Color custom = Color.FromArgb(255, 128, 0);

System.Drawing.Colorは、RGBAの各プロパティを持っており、作成した色から各成分を取り出すこともできます。

C#
Color color = Color.FromArgb(255, 128, 64);

int r = color.R;
int g = color.G;
int b = color.B;
int a = color.A;

2-2. Color.Redなどの名前付き色を使う方法

もっとも簡単な色指定は、名前付き色を使う方法です。

C#
Color red = Color.Red;
Color blue = Color.Blue;
Color green = Color.Green;
Color black = Color.Black;
Color white = Color.White;

Windows Formsでボタンの文字色を赤にする場合は、次のように書けます。

C#
button1.ForeColor = Color.Red;

フォームの背景色を青にする場合は、次のように書きます。

C#
this.BackColor = Color.Blue;

名前付き色は読みやすく、コードの意味がすぐにわかる点がメリットです。一方で、細かい色味を指定したい場合にはRGBや16進数を使うほうが向いています。

2-3. Color.FromArgbで色を作成する方法

Color.FromArgbを使うと、RGBやARGBの値から独自の色を作成できます。

RGBだけを指定する場合は、次のように書きます。

C#
Color orange = Color.FromArgb(255, 165, 0);

この場合、引数は左からRed、Green、Blueです。透明度は指定していないため、通常は完全不透明の色として扱われます。

透明度も指定する場合は、引数を4つ使います。

C#
Color semiTransparentRed = Color.FromArgb(128, 255, 0, 0);

この場合、引数は左からAlpha、Red、Green、Blueです。System.Drawing.Color.FromArgb(int alpha, int red, int green, int blue)は、ARGB成分からColorを作成します。

2-4. ColorオブジェクトからR・G・B・Aの値を取得する方法

作成済みのColorから各成分を取得するには、RGBAプロパティを使います。

C#
Color color = Color.FromArgb(128, 255, 100, 50);

int alpha = color.A;
int red = color.R;
int green = color.G;
int blue = color.B;

Console.WriteLine($"A={alpha}, R={red}, G={green}, B={blue}");

出力例は次のようになります。

C#
A=128, R=255, G=100, B=50

RGB値をログに出したいとき、設定された色を別の形式に変換したいとき、デバッグで色の中身を確認したいときに便利です。

2-5. Color.Emptyとの違いと使いどころ

Color.Emptyは、特定の色を表すというより「色が設定されていない状態」を表すために使われます。

C#
Color color = Color.Empty;

if (color.IsEmpty)
{
Console.WriteLine("色は未設定です。");
}

Color.Transparentは透明な色ですが、Color.Emptyは透明色ではありません。Transparentは「透明という色」、Emptyは「色がない状態」と考えると理解しやすいです。

たとえば、ユーザーが色を選択していない場合の初期値としてColor.Emptyを使い、実際に透明な描画をしたい場合はColor.Transparentを使う、というように使い分けます。

3. RGBで色を指定する方法

3-1. RGBとは何か

RGBとは、Red、Green、Blueの頭文字を取った色の表現方法です。赤・緑・青の光をどのくらい混ぜるかによって、さまざまな色を作ります。

たとえば、赤は次のように表します。

C#
Color red = Color.FromArgb(255, 0, 0);

白は赤・緑・青をすべて最大にします。

C#
Color white = Color.FromArgb(255, 255, 255);

黒は赤・緑・青をすべて0にします。

C#
Color black = Color.FromArgb(0, 0, 0);

RGBは、画面表示やWebデザイン、画像処理などで広く使われる基本的な色指定です。

3-2. RGB値の範囲は0〜255

C#のColor.FromArgbで指定するRGB値は、基本的に0〜255の範囲です。これは各成分が8ビットで表されるためです。Microsoftのドキュメントでも、Color.FromArgbの各成分は8ビットに制限されると説明されています。

C#
Color color = Color.FromArgb(100, 150, 200);

この例では、Redが100、Greenが150、Blueが200です。

0に近いほどその色成分は弱くなり、255に近いほど強くなります。

C#
Color darkRed = Color.FromArgb(100, 0, 0);
Color brightRed = Color.FromArgb(255, 0, 0);

範囲外の値を指定すると例外や意図しない動作の原因になるため、ユーザー入力から色を作る場合は0〜255に収まっているかチェックしましょう。

3-3. Color.FromArgbでRGBを指定する

RGBで色を作る基本形は次のとおりです。

C#
Color color = Color.FromArgb(red, green, blue);

具体例は次のようになります。

C#
Color skyBlue = Color.FromArgb(135, 206, 235);
Color tomato = Color.FromArgb(255, 99, 71);
Color gray = Color.FromArgb(128, 128, 128);

RGB値を変数で管理する場合は、次のように書けます。

C#
int r = 52;
int g = 152;
int b = 219;

Color mainColor = Color.FromArgb(r, g, b);

デザインツールで取得したRGB値をそのままC#に反映したい場合に便利です。

3-4. 背景色・文字色にRGBを適用する例

Windows Formsでフォームの背景色をRGBで指定する例です。

C#
this.BackColor = Color.FromArgb(240, 248, 255);

ボタンの背景色を指定する例です。

C#
button1.BackColor = Color.FromArgb(52, 152, 219);

ラベルの文字色を指定する例です。

C#
label1.ForeColor = Color.FromArgb(231, 76, 60);

複数のコントロールで同じ色を使う場合は、変数に入れておくと保守しやすくなります。

C#
Color accentColor = Color.FromArgb(52, 152, 219);

button1.BackColor = accentColor;
label1.ForeColor = accentColor;

3-5. RGB指定でよくある間違い

RGB指定でよくある間違いは、引数の順番を勘違いすることです。

C#
Color color = Color.FromArgb(255, 0, 0);

この場合は赤です。R=255G=0B=0だからです。

一方、次のように書くと青になります。

C#
Color color = Color.FromArgb(0, 0, 255);

また、WebのCSSでよく見るrgb(255, 0, 0)と、C#のColor.FromArgb(255, 0, 0)は同じ順番で読めます。ただし、ARGB指定では先頭にAlphaが追加されます。

C#
Color color = Color.FromArgb(128, 255, 0, 0);

この場合は、A=128R=255G=0B=0です。RGBとARGBを混同しないように注意しましょう。

4. ARGBで透明度を含めて色を指定する方法

4-1. ARGBとは何か

ARGBとは、Alpha、Red、Green、Blueの4つの成分で色を表す方法です。RGBに透明度を加えた形式と考えるとわかりやすいです。

C#
Color color = Color.FromArgb(128, 255, 0, 0);

この例では、半透明の赤を表しています。

RGBでは色の明るさや色味を指定できますが、透明度は指定できません。透明度を扱いたい場合は、ARGBを使います。

4-2. A・R・G・Bそれぞれの意味

ARGBの各成分は次の意味を持ちます。

AはAlphaで、透明度を表します。

RはRedで、赤の強さを表します。

GはGreenで、緑の強さを表します。

BはBlueで、青の強さを表します。

C#では、ARGBを指定するときの順番が重要です。

C#
Color color = Color.FromArgb(alpha, red, green, blue);

たとえば、次のコードは半透明の青です。

C#
Color semiTransparentBlue = Color.FromArgb(128, 0, 0, 255);

4-3. アルファ値と透明度の関係

アルファ値は0〜255の範囲で指定します。WPFのドキュメントでは、アルファ値255は完全不透明、0は完全透明を示すと説明されています。

C#
Color transparent = Color.FromArgb(0, 255, 0, 0);
Color semiTransparent = Color.FromArgb(128, 255, 0, 0);
Color opaque = Color.FromArgb(255, 255, 0, 0);

A=0は完全透明です。

A=128はおおよそ半透明です。

A=255は完全不透明です。

透明度をパーセント感覚で扱いたい場合は、次のような計算ができます。

C#
int alpha = (int)(255 * 0.5); // 50%
Color color = Color.FromArgb(alpha, 255, 0, 0);

4-4. Color.FromArgbでARGBを指定する

System.Drawing.ColorでARGBを指定する場合は、次のように書きます。

C#
Color color = Color.FromArgb(128, 255, 100, 50);

WPFの場合は、byte値を使って次のように指定します。

C#
System.Windows.Media.Color color =
System.Windows.Media.Color.FromArgb(128, 255, 100, 50);

WPFでは、透明度を指定しない場合にFromRgbを使うこともできます。

C#
System.Windows.Media.Color color =
System.Windows.Media.Color.FromRgb(255, 100, 50);

FromRgbではアルファ値が255として扱われます。

4-5. 半透明色を使うときの注意点

半透明色を指定しても、必ず見た目に反映されるとは限りません。理由は、描画先のコントロールやフレームワークが透明度をサポートしていない場合があるためです。

Windows Formsでは、コントロールの種類によっては透明色や半透明色が期待どおりに描画されないことがあります。特にBackColorに半透明色を指定しても、背景と自然に合成されない場合があります。

一方、WPFはブラシや描画システムが透明度に強く、半透明の背景や図形を扱いやすいです。

半透明色を使うときは、次の点を確認しましょう。

C#
Color color = Color.FromArgb(128, 255, 0, 0);

色自体のアルファ値が正しいか。

描画先が透明度をサポートしているか。

親要素や背景色との合成が意図どおりか。

画像処理の場合は、保存形式がアルファチャンネルに対応しているか。

5. 16進数カラーコードで色を指定する方法

5-1. 16進数カラーコードとは

16進数カラーコードとは、色を16進数で表現する方法です。WebデザインやCSS、Figma、Photoshopなどのデザインツールでよく使われます。

代表的な形式は次のとおりです。

C#
#FF0000
#00FF00
#0000FF

#FF0000は赤、#00FF00は緑、#0000FFは青です。

C#でも、16進数カラーコードをColorに変換して使えます。

C#
Color red = ColorTranslator.FromHtml("#FF0000");

ColorTranslator.FromHtmlは、HTML色名やHTML形式の色文字列をGDI+のColor構造体に変換するメソッドです。

5-2. #RRGGBB形式の読み方

#RRGGBB形式は、赤・緑・青を2桁ずつの16進数で表します。

C#
#RRGGBB

たとえば、赤は次のようになります。

C#
#FF0000

これは次の意味です。

C#
RR = FF // 255
GG = 00 // 0
BB = 00 // 0

つまり、RGBで書くと次の色です。

C#
Color red = Color.FromArgb(255, 0, 0);

16進数のFFは10進数の255、00は10進数の0です。

5-3. #AARRGGBB形式の読み方

透明度を含める場合は、#AARRGGBB形式を使うことがあります。

C#
#AARRGGBB

たとえば、半透明の赤は次のように表せます。

C#
#80FF0000

これは次の意味です。

C#
AA = 80 // 128
RR = FF // 255
GG = 00 // 0
BB = 00 // 0

C#のARGBと同じく、先頭がAlphaです。

C#
Color color = Color.FromArgb(128, 255, 0, 0);

ただし、環境やライブラリによっては#RRGGBBAAのようなRGBA形式を使う場合もあります。C#で扱うときは、ARGBなのかRGBAなのかを必ず確認しましょう。

5-4. ColorTranslator.FromHtmlで16進数をColorに変換する

Windows Formsなどで#RRGGBB形式の色をSystem.Drawing.Colorに変換するには、ColorTranslator.FromHtmlを使います。

C#
using System.Drawing;

Color color = ColorTranslator.FromHtml("#3498DB");

名前付きHTML色も変換できます。

C#
Color red = ColorTranslator.FromHtml("Red");
Color blue = ColorTranslator.FromHtml("Blue");

ただし、不正な文字列を渡すと例外の原因になります。ユーザー入力を変換する場合は、事前に形式をチェックするか、例外処理を入れましょう。

C#
try
{
Color color = ColorTranslator.FromHtml("#3498DB");
}
catch (Exception ex)
{
Console.WriteLine("色の形式が正しくありません。");
Console.WriteLine(ex.Message);
}

5-5. Colorから16進数文字列に変換する方法

Colorから#RRGGBB形式の文字列を作るには、RGBを2桁の16進数に変換します。

C#
Color color = Color.FromArgb(52, 152, 219);

string hex = $"#{color.R:X2}{color.G:X2}{color.B:X2}";

Console.WriteLine(hex); // #3498DB

透明度も含めて#AARRGGBB形式にする場合は、Aも含めます。

C#
Color color = Color.FromArgb(128, 52, 152, 219);

string hex = $"#{color.A:X2}{color.R:X2}{color.G:X2}{color.B:X2}";

Console.WriteLine(hex); // #803498DB

X2は、16進数を2桁の大文字で出力するための書式指定です。

5-6. 16進数指定で#あり・#なしを扱う方法

ユーザー入力では、#3498DBのように#が付く場合と、3498DBのように#がない場合があります。両方に対応するには、次のように整形してから変換します。

C#
string input = "3498DB";

if (!input.StartsWith("#"))
{
input = "#" + input;
}

Color color = ColorTranslator.FromHtml(input);

より安全に処理するなら、長さや文字種も確認します。

C#
using System.Text.RegularExpressions;

string input = "3498DB";

if (!input.StartsWith("#"))
{
input = "#" + input;
}

if (Regex.IsMatch(input, "^#[0-9A-Fa-f]{6}$"))
{
Color color = ColorTranslator.FromHtml(input);
}
else
{
Console.WriteLine("カラーコードの形式が正しくありません。");
}

#RRGGBBだけを受け付けるのか、#AARRGGBBも受け付けるのかを仕様として決めておくと、後から混乱しにくくなります。

6. 名前付き色を使う方法

6-1. 名前付き色とは

名前付き色とは、RedBlueBlackWhiteTransparentのように、名前で指定できる色のことです。

C#
Color red = Color.Red;
Color blue = Color.Blue;
Color transparent = Color.Transparent;

名前付き色はコードの可読性が高く、簡単なUIやサンプルコードでよく使われます。

C#
label1.ForeColor = Color.Red;
button1.BackColor = Color.LightBlue;

色の数値を覚える必要がないため、初心者にも扱いやすい指定方法です。

6-2. Color.Red・Color.Blue・Color.Transparentの使い方

Color.Redは赤を表します。

C#
Color color = Color.Red;

Color.Blueは青を表します。

C#
Color color = Color.Blue;

Color.Transparentは透明色を表します。

C#
Color color = Color.Transparent;

Windows Formsでラベルの文字色を赤にする例です。

C#
label1.ForeColor = Color.Red;

フォームの背景色を白にする例です。

C#
this.BackColor = Color.White;

透明色を使う例です。

C#
panel1.BackColor = Color.Transparent;

ただし、透明色がどのように表示されるかはコントロールや描画方式によって異なります。

6-3. KnownColorを使って名前付き色を取得する

KnownColorは、既知の色を列挙型として扱うための仕組みです。

C#
KnownColor knownColor = KnownColor.Red;
Color color = Color.FromKnownColor(knownColor);

文字列からKnownColorに変換してColorを作ることもできます。

C#
string name = "Red";

KnownColor knownColor = (KnownColor)Enum.Parse(typeof(KnownColor), name);
Color color = Color.FromKnownColor(knownColor);

ユーザーが選択した色名からColorを作成したい場合に便利です。

6-4. 名前付き色の一覧を取得する方法

名前付き色の一覧を取得するには、KnownColorの値を列挙します。

C#
foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor)))
{
Color color = Color.FromKnownColor(knownColor);
Console.WriteLine($"{knownColor}: R={color.R}, G={color.G}, B={color.B}");
}

システム色を除外したい場合は、IsSystemColorを確認します。

C#
foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor)))
{
Color color = Color.FromKnownColor(knownColor);

if (!color.IsSystemColor)
{
Console.WriteLine(color.Name);
}
}

色選択画面や設定画面で、利用可能な名前付き色を一覧表示したいときに使えます。

6-5. 名前付き色とRGB値の対応を確認する方法

名前付き色のRGB値を確認するには、RGBプロパティを使います。

C#
Color red = Color.Red;

Console.WriteLine(red.R); // 255
Console.WriteLine(red.G); // 0
Console.WriteLine(red.B); // 0

一覧として出力する場合は、次のように書けます。

C#
foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor)))
{
Color color = Color.FromKnownColor(knownColor);

if (!color.IsSystemColor)
{
string hex = $"#{color.R:X2}{color.G:X2}{color.B:X2}";
Console.WriteLine($"{color.Name}: {hex}");
}
}

名前付き色と16進数カラーコードの対応表を作りたい場合にも便利です。

6-6. HTMLの色名とC#の名前付き色の違い

HTMLの色名とC#の名前付き色は似ていますが、完全に同じ前提で扱わないほうが安全です。ColorTranslator.FromHtmlは、HTML色名やHTML形式の色文字列をSystem.Drawing.Colorに変換するためのメソッドです。

C#
Color red1 = Color.Red;
Color red2 = ColorTranslator.FromHtml("Red");

多くの基本色では同じように使えますが、変換元がHTMLカラーなのか、KnownColorなのか、WPFのColorsなのかによって扱いが変わることがあります。

WPFのSystem.Windows.Media.Colorsには、システム定義の色が用意されています。たとえばColors.RedはARGB値#FFFF0000の色として定義されています。

環境をまたいで色名を扱う場合は、最終的にRGB値や16進数カラーコードへ変換して管理すると安全です。

7. C#で色を変換する実用テクニック

7-1. RGBからColorに変換する

RGB値からColorを作るには、Color.FromArgbを使います。

C#
int r = 52;
int g = 152;
int b = 219;

Color color = Color.FromArgb(r, g, b);

メソッド化すると再利用しやすくなります。

C#
static Color FromRgb(int r, int g, int b)
{
return Color.FromArgb(r, g, b);
}

範囲チェックも入れるなら、次のようにできます。

C#
static Color FromRgbSafe(int r, int g, int b)
{
if (r < 0 || r > 255) throw new ArgumentOutOfRangeException(nameof(r));
if (g < 0 || g > 255) throw new ArgumentOutOfRangeException(nameof(g));
if (b < 0 || b > 255) throw new ArgumentOutOfRangeException(nameof(b));

return Color.FromArgb(r, g, b);
}

7-2. ARGBからColorに変換する

ARGB値からColorを作る場合は、4つの引数を指定します。

C#
int a = 128;
int r = 255;
int g = 0;
int b = 0;

Color color = Color.FromArgb(a, r, g, b);

メソッド化する場合は次のように書けます。

C#
static Color FromArgbSafe(int a, int r, int g, int b)
{
if (a < 0 || a > 255) throw new ArgumentOutOfRangeException(nameof(a));
if (r < 0 || r > 255) throw new ArgumentOutOfRangeException(nameof(r));
if (g < 0 || g > 255) throw new ArgumentOutOfRangeException(nameof(g));
if (b < 0 || b > 255) throw new ArgumentOutOfRangeException(nameof(b));

return Color.FromArgb(a, r, g, b);
}

ARGBの順番は、Alpha、Red、Green、Blueです。RGBAと間違えないように注意しましょう。

7-3. 16進数からColorに変換する

#RRGGBB形式からColorに変換するには、ColorTranslator.FromHtmlを使うのが簡単です。

C#
Color color = ColorTranslator.FromHtml("#3498DB");

#なしにも対応する場合は、次のようにします。

C#
static Color FromHex(string hex)
{
if (!hex.StartsWith("#"))
{
hex = "#" + hex;
}

return ColorTranslator.FromHtml(hex);
}

正規表現でチェックする例です。

C#
using System.Text.RegularExpressions;

static Color FromHexSafe(string hex)
{
if (!hex.StartsWith("#"))
{
hex = "#" + hex;
}

if (!Regex.IsMatch(hex, "^#[0-9A-Fa-f]{6}$"))
{
throw new ArgumentException("16進数カラーコードの形式が正しくありません。", nameof(hex));
}

return ColorTranslator.FromHtml(hex);
}

7-4. ColorからRGB値を取り出す

ColorからRGB値を取り出すには、RGBプロパティを使います。

C#
Color color = Color.FromArgb(52, 152, 219);

int r = color.R;
int g = color.G;
int b = color.B;

Console.WriteLine($"R={r}, G={g}, B={b}");

配列として返すメソッドにすることもできます。

C#
static int[] ToRgb(Color color)
{
return new[] { color.R, color.G, color.B };
}

ログ出力や設定ファイルへの保存、UIへの表示などで使えます。

7-5. ColorからARGB値を取り出す

ARGB値を取り出すには、ARGBを使います。

C#
Color color = Color.FromArgb(128, 52, 152, 219);

int a = color.A;
int r = color.R;
int g = color.G;
int b = color.B;

Console.WriteLine($"A={a}, R={r}, G={g}, B={b}");

まとめて文字列にする例です。

C#
static string ToArgbString(Color color)
{
return $"A={color.A}, R={color.R}, G={color.G}, B={color.B}";
}

透明度を含むテーマカラーや画像ピクセルの解析で便利です。

7-6. Colorから16進数カラーコードに変換する

Color#RRGGBB形式に変換するには、次のように書きます。

C#
static string ToHex(Color color)
{
return $"#{color.R:X2}{color.G:X2}{color.B:X2}";
}

使用例です。

C#
Color color = Color.FromArgb(52, 152, 219);
string hex = ToHex(color);

Console.WriteLine(hex); // #3498DB

透明度を含む#AARRGGBB形式に変換する場合は、次のようにします。

C#
static string ToHexWithAlpha(Color color)
{
return $"#{color.A:X2}{color.R:X2}{color.G:X2}{color.B:X2}";
}

使用例です。

C#
Color color = Color.FromArgb(128, 52, 152, 219);
string hex = ToHexWithAlpha(color);

Console.WriteLine(hex); // #803498DB

7-7. 色名からColorに変換する

色名からColorに変換するには、Color.FromNameを使えます。

C#
Color color = Color.FromName("Red");

有効な名前付き色か確認するには、IsKnownColorを使います。

C#
Color color = Color.FromName("Red");

if (color.IsKnownColor)
{
Console.WriteLine("有効な名前付き色です。");
}
else
{
Console.WriteLine("名前付き色ではありません。");
}

HTML色名として扱いたい場合は、ColorTranslator.FromHtmlを使う方法もあります。

C#
Color color = ColorTranslator.FromHtml("Red");

ユーザー入力を受け付ける場合は、色名、16進数、RGBのどれを許可するかを明確にしておくと実装が安定します。

8. 用途別に見るC#の色指定例

8-1. Windows Formsで背景色を変更する

Windows Formsでは、フォームやコントロールの背景色をBackColorで指定します。

C#
using System.Drawing;
using System.Windows.Forms;

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

this.BackColor = Color.LightBlue;
}
}

RGBで指定する場合は次のように書きます。

C#
this.BackColor = Color.FromArgb(240, 248, 255);

ボタンの背景色を変更する例です。

C#
button1.BackColor = Color.FromArgb(52, 152, 219);

Windows FormsではSystem.Drawing.Colorを使う点を覚えておきましょう。

8-2. Windows Formsで文字色を変更する

Windows Formsで文字色を変更するには、ForeColorを使います。

C#
label1.ForeColor = Color.Red;

RGBで指定する例です。

C#
label1.ForeColor = Color.FromArgb(231, 76, 60);

テキストボックスの文字色を変更する例です。

C#
textBox1.ForeColor = Color.DarkBlue;

背景色と文字色をセットで指定する例です。

C#
button1.BackColor = Color.FromArgb(52, 152, 219);
button1.ForeColor = Color.White;

UIでは、文字色と背景色のコントラストが低いと読みにくくなります。色指定では見た目だけでなく可読性も考慮しましょう。

8-3. WPFで色を指定する

WPFでは、背景や文字色に直接Colorを設定するのではなく、Brushを使うことが多いです。

C#
using System.Windows.Media;

this.Background = new SolidColorBrush(Colors.LightBlue);

RGBで指定する場合は、Color.FromRgbを使います。

C#
this.Background = new SolidColorBrush(
Color.FromRgb(52, 152, 219)
);

ARGBで半透明色を指定する場合は、Color.FromArgbを使います。

C#
this.Background = new SolidColorBrush(
Color.FromArgb(128, 52, 152, 219)
);

WPFのColor.FromArgbはアルファチャンネルを指定でき、FromRgbではアルファ値が255として扱われます。

XAMLで指定する場合は、次のように書けます。

XML
<Window Background="#3498DB">
</Window>

半透明を含む場合は、#AARRGGBB形式を使います。

XML
<Window Background="#803498DB">
</Window>

8-4. コンソールアプリで文字色を変更する

コンソールアプリでは、System.Drawing.Colorではなく、Console.ForegroundColorConsole.BackgroundColorを使います。

C#
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("赤い文字です。");

Console.ResetColor();

背景色を変更する例です。

C#
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("青背景に白文字です。");

Console.ResetColor();

ConsoleColorは使用できる色が限られており、RGBで自由に色を指定するものではありません。

C#
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("緑色の文字です。");
Console.ResetColor();

コンソールで細かいRGB色を扱いたい場合は、ANSIエスケープシーケンスを使う方法もありますが、環境によって表示が異なることがあります。

8-5. .NET MAUIで色を指定する

.NET MAUIでは、Microsoft.Maui.Graphics.Colorを使います。.NET MAUIのColorクラスは、RGB、HSL、HSV、色名、アルファチャンネルに対応しています。

C#コードで背景色を指定する例です。

C#
using Microsoft.Maui.Graphics;

label.TextColor = Colors.Red;

RGBで指定する例です。

C#
label.TextColor = Color.FromRgb(52, 152, 219);

ARGBに相当する透明度を含める例です。

C#
label.TextColor = Color.FromRgba(52, 152, 219, 128);

XAMLでは次のように色を指定できます。

XML
<Label Text="Hello"
TextColor="Red" />

16進数で指定する例です。

XML
<Label Text="Hello"
TextColor="#3498DB" />

.NET MAUIでは、Windows、Android、iOS、macOSなど複数プラットフォームを対象にするため、System.Drawing.Colorとは別の型を使う点に注意しましょう。

8-6. 画像処理でColorを使う

画像処理では、ピクセルの色を取得したり変更したりするためにColorを使うことがあります。

C#
using System.Drawing;

Bitmap bitmap = new Bitmap("sample.png");

Color pixelColor = bitmap.GetPixel(10, 20);

Console.WriteLine($"R={pixelColor.R}, G={pixelColor.G}, B={pixelColor.B}");

ピクセルの色を変更する例です。

C#
bitmap.SetPixel(10, 20, Color.Red);
bitmap.Save("output.png");

ただし、System.Drawing.Commonは.NET 6以降、Windows以外のOSではサポート対象外です。クロスプラットフォームの画像処理では、対象OSや使用ライブラリを慎重に選ぶ必要があります。

大量のピクセルを処理する場合、GetPixelSetPixelは遅くなることがあります。その場合は、より高速な画像処理ライブラリやロックビット処理を検討するとよいでしょう。

9. C#の色指定でよくあるエラーと対処法

9-1. Colorが使えないときの原因

Colorが使えない場合、よくある原因は名前空間が不足していることです。

Windows FormsやSystem.Drawing.Colorを使う場合は、次のusingが必要です。

C#
using System.Drawing;

WPFでSystem.Windows.Media.Colorを使う場合は、次のusingが必要です。

C#
using System.Windows.Media;

同じファイル内で複数のColor型が競合している場合は、完全修飾名で指定します。

C#
System.Drawing.Color drawingColor = System.Drawing.Color.Red;

System.Windows.Media.Color mediaColor =
System.Windows.Media.Colors.Red;

Colorという名前だけでは、どの名前空間のColorなのかコンパイラが判断できないことがあります。

9-2. System.Drawingが見つからないときの対処法

System.Drawingが見つからない場合は、プロジェクトの種類や参照設定を確認しましょう。

Windows Formsプロジェクトであれば、通常はSystem.Drawingを利用できます。

C#
using System.Drawing;

.NETプロジェクトでSystem.Drawing.Commonが必要な場合は、NuGetパッケージの参照が必要になることがあります。ただし、System.Drawing.Commonは.NET 6以降、Windows以外のOSではサポート対象外です。Microsoftの互換性情報でも、Windows以外ではサポートされなくなったことが説明されています。

クロスプラットフォームのアプリで色を扱うだけなら、UIフレームワーク側のColorを使うほうが自然です。画像処理の場合は、Windows専用なのか、LinuxやmacOSでも動かすのかを先に決めましょう。

9-3. 16進数カラーコードの形式エラー

16進数カラーコードの形式が間違っていると、変換時にエラーになることがあります。

正しい例です。

C#
#FF0000
#3498DB
#000000

間違った例です。

C#
FF0000
#GG0000
#12345
#1234567

#なしを許可するなら、変換前に#を付けます。

C#
string hex = "FF0000";

if (!hex.StartsWith("#"))
{
hex = "#" + hex;
}

Color color = ColorTranslator.FromHtml(hex);

不正な値を避けるには、正規表現でチェックしましょう。

C#
if (!Regex.IsMatch(hex, "^#[0-9A-Fa-f]{6}$"))
{
throw new ArgumentException("カラーコードが正しくありません。");
}

9-4. ARGBとRGBAを混同したときの注意点

C#のColor.FromArgbでは、4つの引数を指定する場合、順番はARGBです。

C#
Color color = Color.FromArgb(alpha, red, green, blue);

たとえば、半透明の赤は次のように書きます。

C#
Color color = Color.FromArgb(128, 255, 0, 0);

RGBAのつもりで次のように書くと、意図しない色になります。

C#
Color wrong = Color.FromArgb(255, 0, 0, 128);

この例では、A=255R=0G=0B=128となり、不透明な濃い青になります。

WebやJavaScript、CSS、画像ライブラリではRGBA順を使うこともあるため、C#に変換するときは順番を入れ替える必要があります。

9-5. 透明色が反映されないときの確認ポイント

透明色や半透明色が反映されない場合は、次の点を確認しましょう。

まず、アルファ値が正しいか確認します。

C#
Color color = Color.FromArgb(128, 255, 0, 0);
Console.WriteLine(color.A);

次に、描画先が透明度をサポートしているか確認します。Windows Formsの一部コントロールでは、Color.Transparentや半透明色が期待どおりに表示されない場合があります。

画像として保存する場合は、PNGのようにアルファチャンネルを保持できる形式を使っているか確認します。JPEGは透明度を保持できないため、透明部分は失われます。

WPFで透明度を扱う場合は、ColorだけでなくSolidColorBrushの指定も確認しましょう。

C#
var brush = new SolidColorBrush(Color.FromArgb(128, 255, 0, 0));

9-6. .NETの種類によるColorの違いに注意する

C#には複数のColor型があります。

Windows Formsでは主に次を使います。

C#
System.Drawing.Color

WPFでは主に次を使います。

C#
System.Windows.Media.Color

.NET MAUIでは主に次を使います。

C#
Microsoft.Maui.Graphics.Color

これらは名前が同じでも別の型です。そのため、次のようにそのまま代入できない場合があります。

C#
System.Drawing.Color drawingColor = System.Drawing.Color.Red;

// WPFのColorとは別型
System.Windows.Media.Color mediaColor;

必要に応じて、RGB値を取り出して変換します。

C#
System.Drawing.Color drawingColor = System.Drawing.Color.Red;

System.Windows.Media.Color mediaColor =
System.Windows.Media.Color.FromArgb(
drawingColor.A,
drawingColor.R,
drawingColor.G,
drawingColor.B
);

複数のUIフレームワークを扱う場合は、色変換用の共通メソッドを用意しておくと便利です。

10. C#の色指定を使い分けるポイント

10-1. 手軽に指定するなら名前付き色

簡単に色を指定したい場合は、名前付き色が便利です。

C#
button1.BackColor = Color.Red;
label1.ForeColor = Color.Blue;

名前付き色は、コードを読んだだけで何色かわかりやすいというメリットがあります。

サンプルコード、テスト用UI、簡単なアプリでは、名前付き色だけでも十分なことがあります。

ただし、デザインガイドラインに沿った細かい色を指定したい場合は、名前付き色では不十分です。その場合はRGBや16進数を使いましょう。

10-2. 正確に色を指定するならRGB

正確に色を指定したい場合は、RGBが向いています。

C#
Color mainColor = Color.FromArgb(52, 152, 219);

RGBは、デザインツールや仕様書で指定された数値をそのまま反映しやすい方法です。

C#
Color primary = Color.FromArgb(33, 150, 243);
Color danger = Color.FromArgb(244, 67, 54);
Color success = Color.FromArgb(76, 175, 80);

アプリ全体で色を統一したい場合は、RGB値を定数として管理するとよいでしょう。

10-3. 透明度も扱うならARGB

透明度を扱いたい場合は、ARGBを使います。

C#
Color overlay = Color.FromArgb(128, 0, 0, 0);

モーダルの背景、選択範囲のハイライト、画像へのオーバーレイなどで便利です。

C#
Color highlight = Color.FromArgb(80, 255, 255, 0);

ただし、ARGBはRGBと比べて引数の意味を間違えやすいです。

C#
Color color = Color.FromArgb(alpha, red, green, blue);

この順番を常に意識しましょう。

10-4. Webやデザインツールと合わせるなら16進数

Webデザインやデザインツールと色を合わせる場合は、16進数カラーコードが便利です。

C#
Color color = ColorTranslator.FromHtml("#3498DB");

CSSで指定されている色をC#に反映する場合にも使いやすいです。

CSS
color: #3498DB;

C#では次のように変換できます。

C#
Color color = ColorTranslator.FromHtml("#3498DB");

WPFや.NET MAUIのXAMLでも、16進数カラーコードは直感的に使えます。

XML
<Label Foreground="#3498DB" />

デザイナーと開発者で色を共有する場合は、RGB値よりも16進数のほうがやり取りしやすいことがあります。

10-5. 保守しやすい色指定の書き方

保守しやすいコードにするには、色を直接あちこちに書かないことが大切です。

避けたい例です。

C#
button1.BackColor = Color.FromArgb(52, 152, 219);
label1.ForeColor = Color.FromArgb(52, 152, 219);
panel1.BackColor = Color.FromArgb(52, 152, 219);

改善例です。

C#
Color primaryColor = Color.FromArgb(52, 152, 219);

button1.BackColor = primaryColor;
label1.ForeColor = primaryColor;
panel1.BackColor = primaryColor;

さらに、アプリ全体で使うならクラスにまとめます。

C#
public static class AppColors
{
public static readonly Color Primary = Color.FromArgb(52, 152, 219);
public static readonly Color Danger = Color.FromArgb(231, 76, 60);
public static readonly Color Success = Color.FromArgb(46, 204, 113);
}

使用例です。

C#
button1.BackColor = AppColors.Primary;
label1.ForeColor = AppColors.Danger;

色の変更が必要になったときも、定義元だけを修正すれば済みます。

10-6. 定数化・共通化して色を管理する方法

色を共通管理する場合は、プロジェクトの種類に応じて方法を選びます。

Windows Formsなら、静的クラスにまとめる方法が簡単です。

C#
public static class ThemeColors
{
public static readonly Color Main = Color.FromArgb(52, 152, 219);
public static readonly Color Text = Color.FromArgb(33, 33, 33);
public static readonly Color Background = Color.FromArgb(245, 245, 245);
}

WPFなら、リソースとして定義する方法が一般的です。

XML
<SolidColorBrush x:Key="PrimaryBrush" Color="#3498DB" />

使う側は次のように参照します。

XML
<Button Background="{StaticResource PrimaryBrush}" />

.NET MAUIでも、XAMLリソースに色を定義できます。

XML
<Color x:Key="PrimaryColor">#3498DB</Color>

アプリの規模が大きくなるほど、色を共通化するメリットは大きくなります。直接値を書くのではなく、「Primary」「Accent」「Danger」のような意味のある名前で管理すると、デザイン変更にも強くなります。

11. C#の色指定に関するよくある質問

11-1. C#で赤色を指定するには?

もっとも簡単なのは、名前付き色を使う方法です。

C#
Color red = Color.Red;

RGBで指定する場合は次のように書きます。

C#
Color red = Color.FromArgb(255, 0, 0);

ARGBで完全不透明の赤を指定する場合は次のように書きます。

C#
Color red = Color.FromArgb(255, 255, 0, 0);

16進数から変換する場合は次のように書きます。

C#
Color red = ColorTranslator.FromHtml("#FF0000");

11-2. C#で16進数の色を使うには?

Windows FormsやSystem.Drawing.Colorでは、ColorTranslator.FromHtmlを使います。

C#
Color color = ColorTranslator.FromHtml("#3498DB");

#なしの文字列を扱う場合は、変換前に#を付けます。

C#
string hex = "3498DB";

if (!hex.StartsWith("#"))
{
hex = "#" + hex;
}

Color color = ColorTranslator.FromHtml(hex);

WPFのXAMLでは、そのまま指定できます。

XML
<Button Background="#3498DB" />

11-3. Color.FromArgbの引数の順番は?

RGB指定の場合は、次の順番です。

C#
Color.FromArgb(red, green, blue)

ARGB指定の場合は、次の順番です。

C#
Color.FromArgb(alpha, red, green, blue)

たとえば、半透明の赤は次のように指定します。

C#
Color color = Color.FromArgb(128, 255, 0, 0);

4つの引数を使う場合、先頭は透明度を表すAlphaです。RGBAではない点に注意しましょう。

11-4. RGBとARGBの違いは?

RGBは、Red、Green、Blueの3つで色を表します。

C#
Color color = Color.FromArgb(255, 0, 0);

ARGBは、Alpha、Red、Green、Blueの4つで色を表します。

C#
Color color = Color.FromArgb(128, 255, 0, 0);

RGBは透明度を含みません。ARGBは透明度を含みます。

透明度を扱わないならRGB、半透明や透明色を扱うならARGBを使います。

11-5. ColorとBrushの違いは?

Colorは色そのものを表します。

C#
Color color = Color.Red;

Brushは、その色を使って塗るためのオブジェクトです。特にWPFでは、背景や文字色にBrushを指定することがよくあります。

C#
SolidColorBrush brush = new SolidColorBrush(Colors.Red);

WPFのボタン背景に使う例です。

C#
button.Background = new SolidColorBrush(Colors.Red);

単色を表すのがColor、画面上に塗るために使うのがBrushと考えると理解しやすいです。

11-6. 透明色を指定するには?

完全な透明色を指定するには、Color.Transparentを使います。

C#
Color transparent = Color.Transparent;

ARGBで指定する場合は、Alphaを0にします。

C#
Color transparentRed = Color.FromArgb(0, 255, 0, 0);

半透明にする場合は、Alphaを0〜255の間にします。

C#
Color semiTransparentRed = Color.FromArgb(128, 255, 0, 0);

WPFでも同じ考え方で、Alphaが0なら完全透明、255なら完全不透明です。

11-7. 名前付き色の一覧は取得できる?

取得できます。KnownColorを列挙すると、名前付き色の一覧を確認できます。

C#
foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor)))
{
Color color = Color.FromKnownColor(knownColor);

if (!color.IsSystemColor)
{
Console.WriteLine(color.Name);
}
}

RGB値も一緒に表示する場合は、次のようにします。

C#
foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor)))
{
Color color = Color.FromKnownColor(knownColor);

if (!color.IsSystemColor)
{
Console.WriteLine($"{color.Name}: R={color.R}, G={color.G}, B={color.B}");
}
}

色名と16進数カラーコードを表示する例です。

C#
foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor)))
{
Color color = Color.FromKnownColor(knownColor);

if (!color.IsSystemColor)
{
string hex = $"#{color.R:X2}{color.G:X2}{color.B:X2}";
Console.WriteLine($"{color.Name}: {hex}");
}
}

名前付き色の一覧を使えば、色選択UIや設定画面を簡単に作れます。

まとめ

C#で色を指定する方法には、名前付き色、RGB、ARGB、16進数カラーコードなどがあります。簡単に指定したい場合はColor.RedColor.Blueのような名前付き色が便利です。正確に色を指定したい場合はColor.FromArgb(255, 0, 0)のようなRGB指定を使います。透明度も扱いたい場合は、Color.FromArgb(128, 255, 0, 0)のようにARGBで指定します。

16進数カラーコードを使う場合は、Windows FormsなどではColorTranslator.FromHtml("#FF0000")が便利です。Webやデザインツールの色と合わせるときは、16進数で管理するとわかりやすくなります。

ただし、C#のColorは環境によって型が異なります。Windows FormsではSystem.Drawing.Color、WPFではSystem.Windows.Media.Color、.NET MAUIではMicrosoft.Maui.Graphics.Colorを使います。同じColorという名前でも別の型なので、プロジェクトに合わせて正しい名前空間を選ぶことが大切です。

色指定を保守しやすくするには、コード内に色の値を直接書き散らすのではなく、定数化・共通化して管理しましょう。テーマカラーやアクセントカラーを一か所にまとめておけば、デザイン変更にも対応しやすくなります。