Converting a string HEX to color in Windows Phone Runtime c#

前端 未结 8 1669
执念已碎
执念已碎 2021-02-09 07:30

I am working on a windows phone game, and I got stuck when I wanted to convert a HEX string into Color. On windows phone 8 silverlight it is not a problem but I cannot find a so

相关标签:
8条回答
  • 2021-02-09 07:55

    I made a method from the top answer here:

    private Windows.UI.Color GetColorFromHex(string hexString)
    {
        hexString = hexString.Replace("#", string.Empty);
        byte r = byte.Parse(hexString.Substring(0, 2), NumberStyles.HexNumber);
        byte g = byte.Parse(hexString.Substring(2, 2), NumberStyles.HexNumber);
        byte b = byte.Parse(hexString.Substring(4, 2), NumberStyles.HexNumber);
    
        return Windows.UI.Color.FromArgb(byte.Parse("1"), r, g, b);
    }
    
    0 讨论(0)
  • 2021-02-09 07:56

    Color.FromArgb is in the Windows.UI namespace. There isn't a Color.FromName method, but you can use the Colors.< name > properties or you can use reflection to look up the name from a string.

    using System.Reflection;     // For GetRuntimeProperty
    using System.Globalization;  // For NumberStyles
    using Windows.UI;            // for Color and Colors
    using Windows.UI.Xaml.Media; // for SystemColorBrush
    
    // from #AARRGGBB string
    byte a = byte.Parse(hexColor.Substring(1, 2),NumberStyles.HexNumber);
    byte r = byte.Parse(hexColor.Substring(3, 2),NumberStyles.HexNumber);
    byte g = byte.Parse(hexColor.Substring(5, 2),NumberStyles.HexNumber);
    byte b = byte.Parse(hexColor.Substring(7, 2),NumberStyles.HexNumber);
    
    Windows.UI.Color color = Color.FromArgb(a, r, g, b);
    Windows.UI.Xaml.Media.SolidColorBrush br = new SolidColorBrush(color);
    
    // From Name
    var prop = typeof(Windows.UI.Colors).GetRuntimeProperty("Aqua");
    if (prop != null)
    {
        Color c = (Color) prop.GetValue(null);
        br = new SolidColorBrush(c);
    }
    
    // From Property
    br = new SolidColorBrush(Colors.Aqua);
    
    0 讨论(0)
  • 2021-02-09 08:00

    Here is an easy to use code snippet

    public Color HexColor(String hex)
    {
     //remove the # at the front
     hex = hex.Replace("#", "");
    
     byte a = 255;
     byte r = 255;
     byte g = 255;
     byte b = 255;
    
     int start = 0;
    
     //handle ARGB strings (8 characters long)
     if (hex.Length == 8)
     {
         a = byte.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber);
         start = 2;
     }
    
     //convert RGB characters to bytes
     r = byte.Parse(hex.Substring(start, 2), System.Globalization.NumberStyles.HexNumber);
     g = byte.Parse(hex.Substring(start+2, 2), System.Globalization.NumberStyles.HexNumber);
     b = byte.Parse(hex.Substring(start+4, 2), System.Globalization.NumberStyles.HexNumber);
    
     return Color.FromArgb(a, r, g, b);
    }
    

    and you can simply call like the below one

    Color c = HexColor("#99ccff");
    

    I tested this in winphone 8.1 and it works

    Reference

    0 讨论(0)
  • 2021-02-09 08:06

    Just in case someone is looking for a better alternative. In Universal Windows Platform (Windows 10), there is XamlBindingHelper.ConvertValue, which is much better than nothing.

    // Get a Color instance representing #FFFF0000.
    var color = XamlBindingHelper.ConvertValue(typeof(Windows.UI.Color), "red");
    

    It can convert enums from Windows.UI.Xaml namespace, booleans, brushes, colors and other simple stuff XAML parser is able to do.

    0 讨论(0)
  • 2021-02-09 08:08

    You can use

    var color = new SolidColorBrush(Color.FromArgb(0xFF, 0xFF, 0, 0));
    
    0 讨论(0)
  • 2021-02-09 08:11

    Converting Hex to Color in C# for Universal Windows Platform (UWP)

    Create a method to Convert Hex string to SolidColorBrush:

      public SolidColorBrush GetSolidColorBrush(string hex)
        {
            hex = hex.Replace("#", string.Empty);
            byte a = (byte)(Convert.ToUInt32(hex.Substring(0, 2), 16));
            byte r = (byte)(Convert.ToUInt32(hex.Substring(2, 2), 16));
            byte g = (byte)(Convert.ToUInt32(hex.Substring(4, 2), 16));
            byte b = (byte)(Convert.ToUInt32(hex.Substring(6, 2), 16));
            SolidColorBrush myBrush = new SolidColorBrush(Windows.UI.Color.FromArgb(a, r, g, b));
            return myBrush;
        }
    

    Now all that left is to get the color by Calling the method and pass the hex string to it as parameter:

      var color = GetSolidColorBrush("#FFCD3927").Color;  
    

    Reference: http://www.joeljoseph.net/converting-hex-to-color-in-universal-windows-platform-uwp/

    0 讨论(0)
提交回复
热议问题