DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

HTMLの色からColorオブジェクトを取得する

HTMLでは色を「# + 16進数」または「色の名前」で指定しますが、このようにして指定された色(HTMLカラー)を.NETで使われるGDI+のColorオブジェクトに変換するには、ColorTranslator.FromHtmlメソッドを使用します。

また、HTMLで使われる色の名前は.NETでも「定義された色」(KnownColor列挙体の要素によって表される色)としてすべて登録されているようなので、ColorクラスのFromNameメソッドによってもColorオブジェクトに変換できるでしょう。HTMLの色の名前によりColorオブジェクトへ変換されたときは、ColorTranslator.FromHtmlメソッドを使った時でも、FromNameメソッドを使った時同様、Color.IsNamedColorプロパティ(及びIsKnownColorプロパティ)はTrueとなります。

逆にColorオブジェクトからHTMLカラーの文字列に変換するには、ColorTranslator.ToHtmlメソッドを使用します。この時、色の名前を指定して作成したColorオブジェクトは色の名前に変換されますが、そうでない時は「# + 16進数」になります。

次にこれらの機能を使った例を示します。ここではHTMLカラーの"Tomato"と"#FF6347"をColorオブジェクトに変換しています。"Tomato"と"#FF6347"は全く同じ色ですが、変換された後のColorオブジェクトのToStringメソッドと、IsNamedColorプロパティの結果は違っています。さらにこれらをColorTranslator.ToHtmlメソッドでHTMLカラーに変換すると、みごとに元と同じく"Tomato"と"#FF6347"に戻ります。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing

'FromHtmlにより、"Tomato"をColorに変換
Dim col1 As Color = ColorTranslator.FromHtml("Tomato")
'FromHtmlにより、"#FF6347"をColorに変換
'"Tomato"と"#FF6347"は同じ色
Dim col2 As Color = ColorTranslator.FromHtml("#FF6347")
'FromNameにより、"Tomato"をColorに変換
Dim col3 As Color = Color.FromName("Tomato")

'色の名前と、IsNamedColorの値を調べる
Console.WriteLine("Color:{0} / IsNamedColor:{1}", _
    col1.ToString(), col1.IsNamedColor)
Console.WriteLine("Color:{0} / IsNamedColor:{1}", _
    col2.ToString(), col2.IsNamedColor)
Console.WriteLine("Color:{0} / IsNamedColor:{1}", _
    col3.ToString(), col3.IsNamedColor)
'上の結果:
'Color:Color [Tomato] / IsNamedColor:True
'Color:Color [A=255, R=255, G=99, B=71] / IsNamedColor:False
'Color:Color [Tomato] / IsNamedColor:True

'ColorをHTMLカラーに変換する
Console.WriteLine("col1:{0}", ColorTranslator.ToHtml(col1))
Console.WriteLine("col2:{0}", ColorTranslator.ToHtml(col2))
Console.WriteLine("col3:{0}", ColorTranslator.ToHtml(col3))
'上の結果:
'col1:Tomato
'col2:#FF6347
'col3:Tomato

'PictureBox1をTomato色にする
PictureBox1.BackColor = col1
C#
コードを隠すコードを選択
//using System.Drawing;

//FromHtmlにより、"Tomato"をColorに変換
Color col1 = ColorTranslator.FromHtml("Tomato");
//FromHtmlにより、"#FF6347"をColorに変換
//"Tomato"と"#FF6347"は同じ色
Color col2 = ColorTranslator.FromHtml("#FF6347");
//FromNameにより、"Tomato"をColorに変換
Color col3 = Color.FromName("Tomato");

//色の名前と、IsNamedColorの値を調べる
Console.WriteLine("Color:{0} / IsNamedColor:{1}",
    col1.ToString(), col1.IsNamedColor);
Console.WriteLine("Color:{0} / IsNamedColor:{1}",
    col2.ToString(), col2.IsNamedColor);
Console.WriteLine("Color:{0} / IsNamedColor:{1}",
    col3.ToString(), col3.IsNamedColor);
//上の結果:
//Color:Color [Tomato] / IsNamedColor:True
//Color:Color [A=255, R=255, G=99, B=71] / IsNamedColor:False
//Color:Color [Tomato] / IsNamedColor:True

//ColorをHTMLカラーに変換する
Console.WriteLine("col1:{0}", ColorTranslator.ToHtml(col1)); 
Console.WriteLine("col2:{0}", ColorTranslator.ToHtml(col2)); 
Console.WriteLine("col3:{0}", ColorTranslator.ToHtml(col3)); 
//上の結果:
//col1:Tomato
//col2:#FF6347
//col3:Tomato

//PictureBox1をTomato色にする
PictureBox1.BackColor = col1;

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。