Convert .Net Color Objects to HEX codes and Back

后端 未结 5 568
广开言路
广开言路 2020-12-06 05:26

As per the question title, How could I take a hex code and convert it to a .Net Color object, and do it the other way?

I googled and keep getting the same way which

5条回答
  •  北海茫月
    2020-12-06 06:01

    Something like :

    Color color = Color.Red;
    string colorString = string.Format("#{0:X2}{1:X2}{2:X2}",
        color.R, color.G, color.B);
    

    Doing it the other way is a little more complex as #F00 is a valid html color (meaning full red) but it is still doable using regex, here is a small sample class :

    using System;
    using System.Diagnostics;
    using System.Drawing;
    using System.Text.RegularExpressions;
    using System.Collections.Generic;
    
    public static class HtmlColors
    {
        public static string ToHtmlHexadecimal(this Color color)
        {
            return string.Format("#{0:X2}{1:X2}{2:X2}", color.R, color.G, color.B);
        }
    
        static Regex htmlColorRegex = new Regex(
            @"^#((?'R'[0-9a-f]{2})(?'G'[0-9a-f]{2})(?'B'[0-9a-f]{2}))"
            + @"|((?'R'[0-9a-f])(?'G'[0-9a-f])(?'B'[0-9a-f]))$",
            RegexOptions.Compiled | RegexOptions.IgnoreCase);
    
        public static Color FromHtmlHexadecimal(string colorString)
        {
            if (colorString == null)
            {
                throw new ArgumentNullException("colorString");
            }
    
            var match = htmlColorRegex.Match(colorString);
            if (!match.Success)
            {
                var msg = "The string \"{0}\" doesn't represent"
                msg += "a valid HTML hexadecimal color";
                msg = string.Format(msg, colorString);
    
                throw new ArgumentException(msg,
                    "colorString");
            }
    
            return Color.FromArgb(
                ColorComponentToValue(match.Groups["R"].Value),
                ColorComponentToValue(match.Groups["G"].Value),
                ColorComponentToValue(match.Groups["B"].Value));
        }
    
        static int ColorComponentToValue(string component)
        {
            Debug.Assert(component != null);
            Debug.Assert(component.Length > 0);
            Debug.Assert(component.Length <= 2);
    
            if (component.Length == 1)
            {
                component += component;
            }
    
            return int.Parse(component,
                System.Globalization.NumberStyles.HexNumber);
        }
    }
    

    Usage :

    // Display #FF0000
    Console.WriteLine(Color.Red.ToHtmlHexadecimal());
    
    // Display #00FF00
    Console.WriteLine(HtmlColors.FromHtmlHexadecimal("#0F0").ToHtmlHexadecimal());
    
    // Display #FAF0FE
    Console.WriteLine(HtmlColors.FromHtmlHexadecimal("#FAF0FE").ToHtmlHexadecimal());
    

提交回复
热议问题