【C#】Colorインスタンスから「RGB(FFFFFF)」形式の文字列を取得する方法。

ども、村正です。

今回は色情報を表すColorインスタンスから、RGB(赤、緑、青)の色情報を「FFFFFF」という文字列で取得する方法について紹介します。

やりたいこと

今回やりたいことは以下の通りです。

  • Colorインスタンスから、RGBの色情報を「FFFFFF」という文字列形式で取得する。

前提

  • Colorとは「System.Drawing」名前空間にある構造体のことを指します
  • RGBとは「R:赤」「G:緑」「B:青」のことを指します(いわゆる「光の三原色」)
  • 今回取得する形式である「FFFFFF」は、RGBの各値を2桁の16進数で表した6桁の文字列です

実装

public class Program
{
    static void Main(string[] args)
    {
        // 青色を表すColorインスタンスを取得
        var color = Color.Blue;

        // RGB値を取得
        var colorRGB = ColorToRGB(color);

        // 取得したRGB値を表示
        Console.WriteLine(colorRGB);
    }

    /// <summary>
    /// ColorインスタンスからRGB値を取得します。
    /// </summary>
    /// <param name="color"></param>
    /// <returns></returns>
    static string ColorToRGB(Color color)
    {
        // RGB各値を取得
        var colorR = color.R;
        var colorG = color.G;
        var colorB = color.B;

        // {int:X2} -> 大文字2桁の16進数表記に変換
        return $"{colorR:X2}{colorG:X2}{colorB:X2}";
    }
}

0000FF

解説

まず、Color構造体には色情報が取得できる3つのプロパティがあります。

  • 「R」プロパティ・・・「赤色を表す値(10進数表記)」が取得できる。
  • 「G」プロパティ・・・「緑色を表す値(10進数表記)」が取得できる。
  • 「B」プロパティ・・・「青色を表す値(10進数表記)」が取得できる。

たとえば「青色」を表す「Color.Blue」からは以下のような値が取得できます(各値は0~255の範囲で値を持っています)。

var color = Color.Blue;

// RGB各値を取得
var colorR = color.R;    // R -> 0
var colorG = color.G;    // G -> 0
var colorB = color.B;    // B -> 255

このように「R」「G」「B」プロパティで各値を取得できるわけですが、取得できる値は「10進数表記」であるという問題があります。今回は「FFFFFF」のように各値を16進数表記で取得したいので、10進数表記を16進数表記に変換する必要があります。

これは「文字列補完式内で書式指定を使う」ことで実装できます。下記のように文字列補完式内で「書式指定:X2」を使用し、10進数表記を大文字2桁の16進数表記の文字列に変換します

// {int:X2} -> 大文字2桁の16進数表記に変換
return $"{colorR:X2}{colorG:X2}{colorB:X2}";

この記述には少し慣れが必要かもしれませんが、なんとなく処理がイメージできるかなと思います。

なお書式指定を「X2」ではなく「x2」にすると、大文字ではなく小文字に変換できます。たとえば「X2」を指定すると「0000FF」になるわけですが、「x2」を指定すると「0000ff」のようになります。(「X」は16進数を表す「Hex」が由来なのかなと思います。)

コメント