掲示板お問い合わせランダムジャンプ

Top Index
Yahooは検索方式が変わったせいか、うまくサイト内検索できないなぁ。つーわけでグーグルに変更。


2010年02月08日
Colorから色名へ変換する
[VB][Silverlight][WPF][XAML][IValueConverter]
約半年振りの記事です^^;
今回はカテゴライズが難しくて、キーワードを行頭に列挙してしまいましたが、XAMLにて利用できる、Colorから色名を取得するConverterを作成しましたので、ご紹介。

colornameconvert_sample

というか、力技なのでコード見てもらうか、丸写ししてもらうのが良いかな・・・
んでは、以下コードです。

Imports System.Windows.Data

Public Class ColorNameConverter
Implements IValueConverter

Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
Try
Dim c As Color = value
Dim name As String = ""

If c.A = 0 AndAlso c.R = 0 AndAlso c.G = 0 AndAlso c.B = 0 Then : name = "Transparent"
ElseIf c.A = 255 AndAlso c.R = 0 AndAlso c.G = 0 AndAlso c.B = 0 Then : name = "Black"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 255 AndAlso c.B = 255 Then : name = "White"
ElseIf c.A = 255 AndAlso c.R = 105 AndAlso c.G = 105 AndAlso c.B = 105 Then : name = "DimGray"
ElseIf c.A = 255 AndAlso c.R = 128 AndAlso c.G = 128 AndAlso c.B = 128 Then : name = "Gray"
ElseIf c.A = 255 AndAlso c.R = 169 AndAlso c.G = 169 AndAlso c.B = 169 Then : name = "DarkGray"
ElseIf c.A = 255 AndAlso c.R = 192 AndAlso c.G = 192 AndAlso c.B = 192 Then : name = "Silver"
ElseIf c.A = 255 AndAlso c.R = 211 AndAlso c.G = 211 AndAlso c.B = 211 Then : name = "LightGray"
ElseIf c.A = 255 AndAlso c.R = 220 AndAlso c.G = 220 AndAlso c.B = 220 Then : name = "Gainsboro"
ElseIf c.A = 255 AndAlso c.R = 245 AndAlso c.G = 245 AndAlso c.B = 245 Then : name = "WhiteSmoke"
ElseIf c.A = 255 AndAlso c.R = 128 AndAlso c.G = 0 AndAlso c.B = 0 Then : name = "Maroon"
ElseIf c.A = 255 AndAlso c.R = 139 AndAlso c.G = 0 AndAlso c.B = 0 Then : name = "DarkRed"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 0 AndAlso c.B = 0 Then : name = "Red"
ElseIf c.A = 255 AndAlso c.R = 165 AndAlso c.G = 42 AndAlso c.B = 42 Then : name = "Brown"
ElseIf c.A = 255 AndAlso c.R = 178 AndAlso c.G = 34 AndAlso c.B = 34 Then : name = "Firebrick"
ElseIf c.A = 255 AndAlso c.R = 205 AndAlso c.G = 92 AndAlso c.B = 92 Then : name = "IndianRed"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 250 AndAlso c.B = 250 Then : name = "Snow"
ElseIf c.A = 255 AndAlso c.R = 240 AndAlso c.G = 128 AndAlso c.B = 128 Then : name = "LightCoral"
ElseIf c.A = 255 AndAlso c.R = 188 AndAlso c.G = 143 AndAlso c.B = 143 Then : name = "RosyBrown"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 228 AndAlso c.B = 225 Then : name = "MistyRose"
ElseIf c.A = 255 AndAlso c.R = 250 AndAlso c.G = 128 AndAlso c.B = 114 Then : name = "Salmon"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 99 AndAlso c.B = 71 Then : name = "Tomato"
ElseIf c.A = 255 AndAlso c.R = 233 AndAlso c.G = 150 AndAlso c.B = 122 Then : name = "DarkSalmon"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 127 AndAlso c.B = 80 Then : name = "Coral"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 69 AndAlso c.B = 0 Then : name = "OrangeRed"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 160 AndAlso c.B = 122 Then : name = "LightSalmon"
ElseIf c.A = 255 AndAlso c.R = 160 AndAlso c.G = 82 AndAlso c.B = 45 Then : name = "Sienna"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 245 AndAlso c.B = 238 Then : name = "SeaShell"
ElseIf c.A = 255 AndAlso c.R = 210 AndAlso c.G = 105 AndAlso c.B = 30 Then : name = "Chocolate"
ElseIf c.A = 255 AndAlso c.R = 139 AndAlso c.G = 69 AndAlso c.B = 19 Then : name = "SaddleBrown"
ElseIf c.A = 255 AndAlso c.R = 244 AndAlso c.G = 164 AndAlso c.B = 96 Then : name = "SandyBrown"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 218 AndAlso c.B = 185 Then : name = "PeachPuff"
ElseIf c.A = 255 AndAlso c.R = 205 AndAlso c.G = 133 AndAlso c.B = 63 Then : name = "Peru"
ElseIf c.A = 255 AndAlso c.R = 250 AndAlso c.G = 240 AndAlso c.B = 230 Then : name = "Linen"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 228 AndAlso c.B = 196 Then : name = "Bisque"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 140 AndAlso c.B = 0 Then : name = "DarkOrange"
ElseIf c.A = 255 AndAlso c.R = 222 AndAlso c.G = 184 AndAlso c.B = 135 Then : name = "BurlyWood"
ElseIf c.A = 255 AndAlso c.R = 210 AndAlso c.G = 180 AndAlso c.B = 140 Then : name = "Tan"
ElseIf c.A = 255 AndAlso c.R = 250 AndAlso c.G = 235 AndAlso c.B = 215 Then : name = "AntiqueWhite"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 222 AndAlso c.B = 173 Then : name = "NavajoWhite"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 235 AndAlso c.B = 205 Then : name = "BlanchedAlmond"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 239 AndAlso c.B = 213 Then : name = "PapayaWhip"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 228 AndAlso c.B = 181 Then : name = "Moccasin"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 165 AndAlso c.B = 0 Then : name = "Orange"
ElseIf c.A = 255 AndAlso c.R = 245 AndAlso c.G = 222 AndAlso c.B = 179 Then : name = "Wheat"
ElseIf c.A = 255 AndAlso c.R = 253 AndAlso c.G = 245 AndAlso c.B = 230 Then : name = "OldLace"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 250 AndAlso c.B = 240 Then : name = "FloralWhite"
ElseIf c.A = 255 AndAlso c.R = 184 AndAlso c.G = 134 AndAlso c.B = 11 Then : name = "DarkGoldenrod"
ElseIf c.A = 255 AndAlso c.R = 218 AndAlso c.G = 165 AndAlso c.B = 32 Then : name = "Goldenrod"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 248 AndAlso c.B = 220 Then : name = "Cornsilk"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 215 AndAlso c.B = 0 Then : name = "Gold"
ElseIf c.A = 255 AndAlso c.R = 240 AndAlso c.G = 230 AndAlso c.B = 140 Then : name = "Khaki"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 250 AndAlso c.B = 205 Then : name = "LemonChiffon"
ElseIf c.A = 255 AndAlso c.R = 238 AndAlso c.G = 232 AndAlso c.B = 170 Then : name = "PaleGoldenrod"
ElseIf c.A = 255 AndAlso c.R = 189 AndAlso c.G = 183 AndAlso c.B = 107 Then : name = "DarkKhaki"
ElseIf c.A = 255 AndAlso c.R = 245 AndAlso c.G = 245 AndAlso c.B = 220 Then : name = "Beige"
ElseIf c.A = 255 AndAlso c.R = 250 AndAlso c.G = 250 AndAlso c.B = 210 Then : name = "LightGoldenrodYellow"
ElseIf c.A = 255 AndAlso c.R = 128 AndAlso c.G = 128 AndAlso c.B = 0 Then : name = "Olive"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 255 AndAlso c.B = 0 Then : name = "Yellow"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 255 AndAlso c.B = 224 Then : name = "LightYellow"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 255 AndAlso c.B = 240 Then : name = "Ivory"
ElseIf c.A = 255 AndAlso c.R = 107 AndAlso c.G = 142 AndAlso c.B = 35 Then : name = "OliveDrab"
ElseIf c.A = 255 AndAlso c.R = 154 AndAlso c.G = 205 AndAlso c.B = 50 Then : name = "YellowGreen"
ElseIf c.A = 255 AndAlso c.R = 85 AndAlso c.G = 107 AndAlso c.B = 47 Then : name = "DarkOliveGreen"
ElseIf c.A = 255 AndAlso c.R = 173 AndAlso c.G = 255 AndAlso c.B = 47 Then : name = "GreenYellow"
ElseIf c.A = 255 AndAlso c.R = 127 AndAlso c.G = 255 AndAlso c.B = 0 Then : name = "Chartreuse"
ElseIf c.A = 255 AndAlso c.R = 124 AndAlso c.G = 252 AndAlso c.B = 0 Then : name = "LawnGreen"
ElseIf c.A = 255 AndAlso c.R = 143 AndAlso c.G = 188 AndAlso c.B = 143 Then : name = "DarkSeaGreen"
ElseIf c.A = 255 AndAlso c.R = 144 AndAlso c.G = 238 AndAlso c.B = 144 Then : name = "LightGreen"
ElseIf c.A = 255 AndAlso c.R = 34 AndAlso c.G = 139 AndAlso c.B = 34 Then : name = "ForestGreen"
ElseIf c.A = 255 AndAlso c.R = 50 AndAlso c.G = 205 AndAlso c.B = 50 Then : name = "LimeGreen"
ElseIf c.A = 255 AndAlso c.R = 152 AndAlso c.G = 251 AndAlso c.B = 152 Then : name = "PaleGreen"
ElseIf c.A = 255 AndAlso c.R = 0 AndAlso c.G = 100 AndAlso c.B = 0 Then : name = "DarkGreen"
ElseIf c.A = 255 AndAlso c.R = 0 AndAlso c.G = 128 AndAlso c.B = 0 Then : name = "Green"
ElseIf c.A = 255 AndAlso c.R = 0 AndAlso c.G = 255 AndAlso c.B = 0 Then : name = "Lime"
ElseIf c.A = 255 AndAlso c.R = 240 AndAlso c.G = 255 AndAlso c.B = 240 Then : name = "Honeydew"
ElseIf c.A = 255 AndAlso c.R = 46 AndAlso c.G = 139 AndAlso c.B = 87 Then : name = "SeaGreen"
ElseIf c.A = 255 AndAlso c.R = 60 AndAlso c.G = 179 AndAlso c.B = 113 Then : name = "MediumSeaGreen"
ElseIf c.A = 255 AndAlso c.R = 0 AndAlso c.G = 255 AndAlso c.B = 127 Then : name = "SpringGreen"
ElseIf c.A = 255 AndAlso c.R = 245 AndAlso c.G = 255 AndAlso c.B = 250 Then : name = "MintCream"
ElseIf c.A = 255 AndAlso c.R = 0 AndAlso c.G = 250 AndAlso c.B = 154 Then : name = "MediumSpringGreen"
ElseIf c.A = 255 AndAlso c.R = 102 AndAlso c.G = 205 AndAlso c.B = 170 Then : name = "MediumAquamarine"
ElseIf c.A = 255 AndAlso c.R = 127 AndAlso c.G = 255 AndAlso c.B = 212 Then : name = "Aquamarine"
ElseIf c.A = 255 AndAlso c.R = 64 AndAlso c.G = 224 AndAlso c.B = 208 Then : name = "Turquoise"
ElseIf c.A = 255 AndAlso c.R = 32 AndAlso c.G = 178 AndAlso c.B = 170 Then : name = "LightSeaGreen"
ElseIf c.A = 255 AndAlso c.R = 72 AndAlso c.G = 209 AndAlso c.B = 204 Then : name = "MediumTurquoise"
ElseIf c.A = 255 AndAlso c.R = 47 AndAlso c.G = 79 AndAlso c.B = 79 Then : name = "DarkSlateGray"
ElseIf c.A = 255 AndAlso c.R = 175 AndAlso c.G = 238 AndAlso c.B = 238 Then : name = "PaleTurquoise"
ElseIf c.A = 255 AndAlso c.R = 0 AndAlso c.G = 128 AndAlso c.B = 128 Then : name = "Teal"
ElseIf c.A = 255 AndAlso c.R = 0 AndAlso c.G = 139 AndAlso c.B = 139 Then : name = "DarkCyan"
ElseIf c.A = 255 AndAlso c.R = 0 AndAlso c.G = 255 AndAlso c.B = 255 Then : name = "Cyan"
ElseIf c.A = 255 AndAlso c.R = 175 AndAlso c.G = 223 AndAlso c.B = 228 Then : name = "Aqua"
ElseIf c.A = 255 AndAlso c.R = 224 AndAlso c.G = 255 AndAlso c.B = 255 Then : name = "LightCyan"
ElseIf c.A = 255 AndAlso c.R = 240 AndAlso c.G = 255 AndAlso c.B = 255 Then : name = "Azure"
ElseIf c.A = 255 AndAlso c.R = 0 AndAlso c.G = 206 AndAlso c.B = 209 Then : name = "DarkTurquoise"
ElseIf c.A = 255 AndAlso c.R = 95 AndAlso c.G = 158 AndAlso c.B = 160 Then : name = "CadetBlue"
ElseIf c.A = 255 AndAlso c.R = 176 AndAlso c.G = 224 AndAlso c.B = 230 Then : name = "PowderBlue"
ElseIf c.A = 255 AndAlso c.R = 173 AndAlso c.G = 216 AndAlso c.B = 230 Then : name = "LightBlue"
ElseIf c.A = 255 AndAlso c.R = 0 AndAlso c.G = 191 AndAlso c.B = 255 Then : name = "DeepSkyBlue"
ElseIf c.A = 255 AndAlso c.R = 135 AndAlso c.G = 206 AndAlso c.B = 235 Then : name = "SkyBlue"
ElseIf c.A = 255 AndAlso c.R = 135 AndAlso c.G = 206 AndAlso c.B = 250 Then : name = "LightSkyBlue"
ElseIf c.A = 255 AndAlso c.R = 70 AndAlso c.G = 130 AndAlso c.B = 180 Then : name = "SteelBlue"
ElseIf c.A = 255 AndAlso c.R = 240 AndAlso c.G = 248 AndAlso c.B = 255 Then : name = "AliceBlue"
ElseIf c.A = 255 AndAlso c.R = 30 AndAlso c.G = 144 AndAlso c.B = 255 Then : name = "DodgerBlue"
ElseIf c.A = 255 AndAlso c.R = 112 AndAlso c.G = 128 AndAlso c.B = 144 Then : name = "SlateGray"
ElseIf c.A = 255 AndAlso c.R = 119 AndAlso c.G = 136 AndAlso c.B = 153 Then : name = "LightSlateGray"
ElseIf c.A = 255 AndAlso c.R = 176 AndAlso c.G = 196 AndAlso c.B = 222 Then : name = "LightSteelBlue"
ElseIf c.A = 255 AndAlso c.R = 100 AndAlso c.G = 149 AndAlso c.B = 237 Then : name = "CornflowerBlue"
ElseIf c.A = 255 AndAlso c.R = 65 AndAlso c.G = 105 AndAlso c.B = 225 Then : name = "RoyalBlue"
ElseIf c.A = 255 AndAlso c.R = 25 AndAlso c.G = 25 AndAlso c.B = 112 Then : name = "MidnightBlue"
ElseIf c.A = 255 AndAlso c.R = 230 AndAlso c.G = 230 AndAlso c.B = 250 Then : name = "Lavender"
ElseIf c.A = 255 AndAlso c.R = 0 AndAlso c.G = 0 AndAlso c.B = 128 Then : name = "Navy"
ElseIf c.A = 255 AndAlso c.R = 0 AndAlso c.G = 0 AndAlso c.B = 139 Then : name = "DarkBlue"
ElseIf c.A = 255 AndAlso c.R = 0 AndAlso c.G = 0 AndAlso c.B = 205 Then : name = "MediumBlue"
ElseIf c.A = 255 AndAlso c.R = 0 AndAlso c.G = 0 AndAlso c.B = 255 Then : name = "Blue"
ElseIf c.A = 255 AndAlso c.R = 248 AndAlso c.G = 248 AndAlso c.B = 255 Then : name = "GhostWhite"
ElseIf c.A = 255 AndAlso c.R = 106 AndAlso c.G = 90 AndAlso c.B = 205 Then : name = "SlateBlue"
ElseIf c.A = 255 AndAlso c.R = 72 AndAlso c.G = 61 AndAlso c.B = 139 Then : name = "DarkSlateBlue"
ElseIf c.A = 255 AndAlso c.R = 123 AndAlso c.G = 104 AndAlso c.B = 238 Then : name = "MediumSlateBlue"
ElseIf c.A = 255 AndAlso c.R = 147 AndAlso c.G = 112 AndAlso c.B = 219 Then : name = "MediumPurple"
ElseIf c.A = 255 AndAlso c.R = 138 AndAlso c.G = 43 AndAlso c.B = 226 Then : name = "BlueViolet"
ElseIf c.A = 255 AndAlso c.R = 75 AndAlso c.G = 0 AndAlso c.B = 130 Then : name = "Indigo"
ElseIf c.A = 255 AndAlso c.R = 153 AndAlso c.G = 50 AndAlso c.B = 204 Then : name = "DarkOrchid"
ElseIf c.A = 255 AndAlso c.R = 148 AndAlso c.G = 0 AndAlso c.B = 211 Then : name = "DarkViolet"
ElseIf c.A = 255 AndAlso c.R = 186 AndAlso c.G = 85 AndAlso c.B = 211 Then : name = "MediumOrchid"
ElseIf c.A = 255 AndAlso c.R = 216 AndAlso c.G = 191 AndAlso c.B = 216 Then : name = "Thistle"
ElseIf c.A = 255 AndAlso c.R = 221 AndAlso c.G = 160 AndAlso c.B = 221 Then : name = "Plum"
ElseIf c.A = 255 AndAlso c.R = 238 AndAlso c.G = 130 AndAlso c.B = 238 Then : name = "Violet"
ElseIf c.A = 255 AndAlso c.R = 128 AndAlso c.G = 0 AndAlso c.B = 128 Then : name = "Purple"
ElseIf c.A = 255 AndAlso c.R = 139 AndAlso c.G = 0 AndAlso c.B = 139 Then : name = "Darkmagenta"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 0 AndAlso c.B = 255 Then : name = "Fuchsia"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 0 AndAlso c.B = 255 Then : name = "Magenta"
ElseIf c.A = 255 AndAlso c.R = 218 AndAlso c.G = 112 AndAlso c.B = 214 Then : name = "Orchid"
ElseIf c.A = 255 AndAlso c.R = 199 AndAlso c.G = 21 AndAlso c.B = 133 Then : name = "MediumVioletRed"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 20 AndAlso c.B = 147 Then : name = "DeepPink"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 105 AndAlso c.B = 180 Then : name = "HotPink"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 240 AndAlso c.B = 245 Then : name = "LavenderBlush"
ElseIf c.A = 255 AndAlso c.R = 219 AndAlso c.G = 112 AndAlso c.B = 147 Then : name = "PaleVioletRed"
ElseIf c.A = 255 AndAlso c.R = 220 AndAlso c.G = 20 AndAlso c.B = 60 Then : name = "Crimson"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 192 AndAlso c.B = 203 Then : name = "Pink"
ElseIf c.A = 255 AndAlso c.R = 255 AndAlso c.G = 182 AndAlso c.B = 193 Then : name = "LightPink"
Else : name = c.ToString
End If

Return name
Catch ex As Exception
Return "#ERROR"
End Try
End Function

Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
Throw New NotSupportedException("文字列から色への変換はサポートされていません。")
End Function

End Class

力技すぎて、HTMLのタグ付けるとサイズオーバー^^;
[ 投稿者:mk3008 at 22:28 | Silverlight | コメント(0) | トラックバック(1) ]

この記事へのコメント

この記事へのトラックバック
Color構造体、色名の相互変換
[VB][Silverlight][WPF][XAML][IValueConverter]先日書いた記事をColor構造体、色名を相互変換できるようにしましたのでアップしてみます。...
投稿者: VB.NETで作る! at 2010-02-20 15:40:05

この記事へのトラックバックURL
http://shinshu.fm/MHz/88.44/a12153/0000314663.trackback

この記事の固定URL
http://shinshu.fm/MHz/88.44/archives/0000314663.html

記事へのコメント
 
認証コード:
画像に表示されるコードを半角英数字で入力して下さい。画像が読み難い場合はこちら
簡単演算認証: 2 + 8 =
足し算の答えを半角英数字で入力して下さい。
名前: [必須]
URL/Email:
タイトル:
コメント: