Simpliest way to convert a Color as a string like #XXXXXX to System.Windows.Media.Brush

前端 未结 3 828
隐瞒了意图╮
隐瞒了意图╮ 2021-01-17 12:55

I think that the title is clear !

What I have now is :

System.Drawing.Color uiui = System.Drawing.ColorTranslator.FromHtml(myString);
var intColor =          


        
3条回答
  •  独厮守ぢ
    2021-01-17 12:58

    This is the helper class that I've used in the past

        public static Color HexStringToColor(string hexColor)
        {
            string hc = ExtractHexDigits(hexColor);
            if (hc.Length != 6)
            {
                // you can choose whether to throw an exception
                //throw new ArgumentException("hexColor is not exactly 6 digits.");
                return Color.Empty;
            }
            string r = hc.Substring(0, 2);
            string g = hc.Substring(2, 2);
            string b = hc.Substring(4, 2);
            Color color = Color.Empty;
            try
            {
                int ri = Int32.Parse(r, NumberStyles.HexNumber);
                int gi = Int32.Parse(g, NumberStyles.HexNumber);
                int bi = Int32.Parse(b, NumberStyles.HexNumber);
                color = Color.FromArgb(ri, gi, bi);
            }
            catch
            {
                // you can choose whether to throw an exception
                //throw new ArgumentException("Conversion failed.");
                return Color.Empty;
            }
            return color;
        }
    

    and an additional helper class

            public static string ExtractHexDigits(string input)
            {
                // remove any characters that are not digits (like #)
                var isHexDigit
                    = new Regex("[abcdefABCDEF\\d]+", RegexOptions.Compiled);
                string newnum = "";
                foreach (char c in input)
                {
                    if (isHexDigit.IsMatch(c.ToString()))
                    {
                        newnum += c.ToString();
                    }
                }
                return newnum;
            }
    

提交回复
热议问题