|
.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進表記と色名表記を相互変換するサンプル・プログラム
以上の方法をまとめたサンプル・プログラムを次に示す。
|
|
| 16進表記と色名表記を相互変換するC#のサンプル・プログラム(colorconv.cs) | |
|
|
| 16進表記と色名表記を相互変換するVB.NETのサンプル・プログラム(colorconv.vb) | |
このサンプル・プログラムでは、「#」を「0x」に置き換えるために、Stringクラス(System名前空間)のReplaceメソッドを利用している。なお、「#」を置き換える文字列は「&H」でもよい。![]()
| カテゴリ:クラス・ライブラリ 処理対象:文字列 使用ライブラリ:KnownColor列挙体(System.Drawing名前空間) 使用ライブラリ:ColorTranslatorクラス(System.Drawing名前空間) 使用ライブラリ:Color構造体(System.Drawing名前空間) 関連TIPS:数値を右詰めや0埋めで文字列化するには? |
|
||||||||||||||||||||||||||||
| 「.NET TIPS」 |
TechTargetジャパン
- Kinectが切り開く“夢の近未来” (2012/2/2)
日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか? - 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する - SQL Azure Data Sync入門 (2012/1/30)
SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説 - Windows Phoneアプリ市場の現状を分析する (2012/1/27)
Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


