Color構造体の色(Colorオブジェクト)をHTML形式の文字列に変換する方法を紹介します。
目次
HTML形式の文字列に変換
Color構造体の色をHTML形式の文字列に変換する場合は、System.Drawing名前空間にあるColorTranslatorクラスのToHtml静的メソッドを使用します。
ToHtml静的メソッドには、パラメーター(引数)にColorを指定します。
1 2 3 4 5 6 7 8 9 10 11 |
Color color1 = Color.FromName("Lime"); // HTML形式の文字列に変換 string html1 = ColorTranslator.ToHtml(color1); Console.WriteLine(html1); // Lime Color color2 = Color.FromArgb(15, 135, 59); // HTML形式の文字列に変換 string html2 = ColorTranslator.ToHtml(color2); Console.WriteLine(html2); // #0F873B |
#rrggbb形式の文字列(カラーコード)に変換
ColorTranslatorクラスのToHtml静的メソッドで、Color構造体をHTML文字列形式に変換する場合、Webカラーとして名前が取得できる場合は名前に変換されます。
例えばColor.BlueをToHtml静的メソッドに指定した場合は「Blue」という文字列が返されます。
ですので、確実に#rrggbb形式のカラーコードを取得する場合は、少し加工(変換)が必要になります。
string.Formatメソッドを使用する方法
stringクラスのFormatメソッドを使用して、RGBの値をそれぞれ16進数に変換して出力することで、#rrggbb形式の文字列として取得することができます。
1 2 3 4 5 6 7 8 9 10 |
Color yellow = Color.Yellow; // カラーコードを取得 string colorCode = string.Format( "#{0:X2}{1:X2}{2:X2}", yellow.R, yellow.G, yellow.B); // コンソールに出力 Console.WriteLine(colorCode); // #FFFF00 |
RGB値から再作成する方法
HTML形式の文字列を取得する対象のColorからRGB(赤緑青)を取得して、Colorオブジェクトを再作成することで#rrggbb形式の文字列を取得することもできます。
ColorTranslatorクラスのToHtml静的メソッドを使用する場合
1 2 3 4 5 6 7 |
Color yellow = Color.Yellow; Color color = Color.FromArgb(yellow.R, yellow.G, yellow.B); // カラーコードを取得 string colorCode = ColorTranslator.ToHtml(color); // コンソールに出力 Console.WriteLine(colorCode); // #FFFF00 |
Color構造体のNameプロパティを使用する場合
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Color yellow = Color.Yellow; Color color = Color.FromArgb(yellow.R, yellow.G, yellow.B); // カラーコードを取得 string colorName = color.Name; // colorNameをコンソールに出力 Console.WriteLine(colorName); // ffffff00 // 先頭の2文字(ff)を除去して先頭に「#」を付加 string colorCode = $"#{colorName.Substring(2)}"; // colorCodeをコンソールに出力 Console.WriteLine(colorCode); // #ffff00 |
サンプルプログラム
Windowsフォームアプリケーションのプロジェクトでサンプルプログラムを作成します。
ユーザーインターフェース(画面デザイン)
フォームにはカラーダイアログボックスを表示するボタン(button1)と、選択したカラーを表示するパネル(panel1)と、HTML形式の文字列を表示するテキストボックス(textBox1)と、#rrggbb形式のカラーコードを表示するテキストボックス(textBox2)を配置します。
ソースコード
ボタンをクリックした際にカラーダイアログボックスを表示して、選択されたカラーのオブジェクトを取得し、HTML形式の文字列を取得、表示する処理を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
using System; using System.Drawing; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { // コンストラクタ public Form1() { InitializeComponent(); } // 色の選択 private void button1_Click(object sender, EventArgs e) { try { // 色の参照 Color? c = this.BrowseColor(); if (!c.HasValue) { return; } // Colorの取得 Color color = c.Value; // パネルの背景色に設定 this.panel1.BackColor = color; // HTMLカラーを設定 this.SetHtmlColor(color); // カラーコードを設定 this.SetColorCode(color); } catch (Exception ex) { MessageBox.Show(ex.Message); } } // 色の参照 private Color? BrowseColor() { // カラーダイアログボックス using (ColorDialog colorDialog = new ColorDialog()) { // ダイアログボックスを表示 DialogResult dialogResult = colorDialog.ShowDialog(this); if (dialogResult == DialogResult.Cancel) { // キャンセル時 return null; } // カラーダイアログボックスで選択した色を取得 Color color = colorDialog.Color; return color; } } // HTMLカラーを設定 private void SetHtmlColor(Color color) { // 色を表すHTML文字列を取得 string htmlColor = ColorTranslator.ToHtml(color); // テキストボックスに表示 this.textBox1.Text = htmlColor; } // カラーコードを設定 private void SetColorCode(Color color) { // カラーコードを取得 string colorCode = string.Format( "#{0:X2}{1:X2}{2:X2}", color.R, color.G, color.B); // テキストボックスに表示 this.textBox2.Text = colorCode; } } } |
サンプルプログラムの実行
プロジェクトをビルドして実行(デバッグ)します。
ボタンをクリックするとカラーダイアログボックスが表示されます。
カラーダイアログボックスで色を選択します。
選択したカラー(色)とHTML形式の文字列とカラーコード(#rrggbb)の文字列が表示されます。
Red(赤)を選択すると以下のような結果になります。
Green(緑)を選択すると以下のような結果になります。