16進カラーコードをColorに変換する

WindowsPhone SilverLight 8.1(以下WPSL8.1)で「Brush」へカラーを設定するときがよくあります。
その際に下記のような形でコード上では設定すると思います。

Brush _brushColor = new SolidColorBrush(Colors.RED);
Brush _brushColor2 = new SolidColorBrush(Color.Color.FromArgb(255,255,0,0));

これで設定していると、HTMLでよくある「#FFFF0000」のような設定ができないことが、不満に感じる時があると思います。
そこで、変換コードを書いてみました。

        /// <summary>
        /// ARGB16進カラーcodeをColorに変換する
        /// </summary>
        /// <param name="colorCode">#00000000</param>
        /// <returns></returns>
        public static Color GetArbgColor(string colorCode)
        {
            try
            {
                // #で始まっているか
                var index = colorCode.IndexOf("#", StringComparison.Ordinal);
                // 文字数の確認と#がおかしな位置にいないか
                if (colorCode.Length != 9 || index != 0)
                {
                    // 例外を投げる
                    throw new ArgumentOutOfRangeException();
                }

                // 分解する
                var alpha = Convert.ToByte(Convert.ToInt32(colorCode.Substring(1, 2), 16));
                var red = Convert.ToByte(Convert.ToInt32(colorCode.Substring(3, 2), 16));
                var green = Convert.ToByte(Convert.ToInt32(colorCode.Substring(5, 2), 16));
                var blue = Convert.ToByte(Convert.ToInt32(colorCode.Substring(7, 2), 16));

                return Color.FromArgb(alpha, red, green, blue);
            }
            catch (ArgumentOutOfRangeException)
            {
                throw new ArgumentOutOfRangeException("GetArbgColor : colorCode OutOfRange");
            }
            catch (ArgumentNullException)
            {
                throw new ArgumentOutOfRangeException("GetArbgColor : \"#\" not found");
            }
            catch (AggregateException)
            {
                throw new ArgumentOutOfRangeException("GetArbgColor : \"#\" not found");
            }
        }

あまりきれいなコードとは言えませんが、上記コードで16進数カラーコードをColorで返すことができます。

Brush _brushColor = new SolidColorBrush(GetArbgColor("#FFFF0000"));

このように書けるので、HTMLで使いたいカラーを引っ張ってきたときには便利ではないかと思います。

今回のコードはWPSL8.1向けとしていますが、WPSL8.0でもWindows Runtimeでもそのまま使えるはずです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください