.NET TIPS

HTMLカラーの色名表記と16進表記を相互に変換するには?

デジタルアドバンテージ
2004/12/03

 HTMLで色を指定する場合、表記方法として16進数文字列で表す16進表記(「#FF0000」など。RGBカラー値とも呼ばれる)と色名表記(「Red」など)の2通りがある。本稿では、色名表記と16進表記を相互に変換する方法を紹介する。

 ちなみに、色名表記で標準的に利用可能な色には、一般的に「X11カラー」と呼ばれる140種類があり、KnownColor列挙体(System.Drawing名前空間)には、これらすべての色名が定義されている(「KnownColor.Red」など)。

色名表記→16進表記の変換

 「Red → #FF0000」のように色名表記を16進表記に変換するには、ColorTraslatorクラス(System.Drawing名前空間)のFromHtmlメソッドにより、まず色名からColor構造体(System.Drawing名前空間)のオブジェクトを得る。

Color c = ColorTranslator.FromHtml("Red");

 これには、次のようにColor構造体のFromNameメソッドを使ってもよい。

Color c = Color.FromName("Red");

 Color構造体では、その色を構成する赤、緑、青の値をR、G、Bプロパティから得ることができるので、後はそれらの各値をそれぞれ16進数2けたの文字列に変換して連結すればよい。

String htmlColor = String.Format("#{0:X2}{1:X2}{2:X2}", c.R, c.G, c.B);

 上記の例の場合には、変数htmlColorは「#FF0000」となる。数値を書式指定して文字列に変換する方法に関しては「TIPS:数値を右詰めや0埋めで文字列化するには?」で解説している。

 なお、上記のように色名からColorオブジェクトを作成した場合には、そのNameプロパティにより色名を参照できる。

16進表記→色名表記の変換

 「#FF0000 → Red」のように16進表記を色名表記に変換する場合にもColorTranslatorクラスのFromHtmlメソッドが利用できるが、単純に次のように記述しただけではうまくいかない。

Color c = ColorTranslator.FromHtml("#FF0000");

 この場合には、ColorオブジェクトのNameプロパティには「ffff0000」という文字列がセットされる(先頭の「ff」は透明度を示すアルファ値を表している)。しかし、次のように「#」を「0x」に置き換えて呼び出すことにより、Nameプロパティには色名がセットされるようになる。

Color c = ColorTranslator.FromHtml("0xFF0000");

 この場合には、c.Nameの値は「Red」となり、色名を文字列として取得できる。対応する色名が存在しない場合、c.Nameの値は「ff」で始まる8けたの16進数文字列となる。

16進表記と色名表記を相互変換するサンプル・プログラム

 以上の方法をまとめたサンプル・プログラムを次に示す。

// colorconv.cs

using System;
using System.Drawing;

public class HtmlColorConversion {
  static void Main() {
    Color c;
    String htmlColor;

    // Red → #FF0000

    c = ColorTranslator.FromHtml("Red");
    htmlColor = String.Format("#{0:X2}{1:X2}{2:X2}", c.R, c.G, c.B);

    Console.WriteLine(htmlColor); // 出力:#FF0000

    // #FF0000 → Red

    // 色名は取得できない
    c = ColorTranslator.FromHtml(htmlColor);
    Console.WriteLine(c.Name); // 出力:ffff0000

    // 「#」を「0x」に置き換えれば取得できる
    c = ColorTranslator.FromHtml(htmlColor.Replace("#", "0x"));
    Console.WriteLine(c.Name); // 出力:Red
  }
}

// コンパイル方法:csc colorconv.cs
16進表記と色名表記を相互変換するC#のサンプル・プログラム(colorconv.cs)
 
' colorconv.vb

Imports System
Imports System.Drawing

Public Class HtmlColorConversion
  Shared Sub Main()
    Dim c As Color
    Dim htmlColor As String

    ' Red → #FF0000

    c = ColorTranslator.FromHtml("Red")
    htmlColor = String.Format("#{0:X2}{1:X2}{2:X2}", c.R, c.G, c.B)

    Console.WriteLine(htmlColor) ' 出力:#FF0000

    ' #FF0000 → Red

    ' 色名は取得できない
    c = ColorTranslator.FromHtml(htmlColor)
    Console.WriteLine(c.Name) ' 出力:ffff0000

    ' 「#」を「0x」に置き換えれば取得できる
    c = ColorTranslator.FromHtml(htmlColor.Replace("#", "0x"))
    Console.WriteLine(c.Name) ' 出力:Red
  End Sub
End Class

' コンパイル方法:vbc /r:System.Drawing.dll colorconv.vb
16進表記と色名表記を相互変換するVB.NETのサンプル・プログラム(colorconv.vb)

 このサンプル・プログラムでは、「#」を「0x」に置き換えるために、Stringクラス(System名前空間)のReplaceメソッドを利用している。なお、「#」を置き換える文字列は「&H」でもよい。End of Article

カテゴリ:クラス・ライブラリ 処理対象:文字列
使用ライブラリ:KnownColor列挙体(System.Drawing名前空間)
使用ライブラリ:ColorTranslatorクラス(System.Drawing名前空間)
使用ライブラリ:Color構造体(System.Drawing名前空間)
関連TIPS:数値を右詰めや0埋めで文字列化するには?
 
この記事と関連性の高い別の.NET TIPS
Visual Studio 2012のXAMLデザイナで「色名」により色を指定するには?
ピクセルの色をHTMLカラーへ変換するには?
コンソール・アプリケーションで文字色や背景色を変えるには?
DataGridコントロールで入力中のセルをハイライト表示するには?
2進数文字列と16進数文字列を相互に変換するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH