/// <summary> /// Converts HEX, functions, or known colors to a Color object /// </summary> /// <returns>The Color</returns> public Color ToColor() { var hex = "000000"; if (Type == TermType.Hex) { if ((Value.Length == 7 || Value.Length == 4) && Value.StartsWith("#")) { hex = Value.Substring(1); } else if (Value.Length == 6 || Value.Length == 3) { hex = Value; } } else if (Type == TermType.Function) { if ((Function.Name.ToLower().Equals("rgb") && Function.Expression.Terms.Count == 3) || (Function.Name.ToLower().Equals("rgba") && Function.Expression.Terms.Count == 4)) { int fr = 0, fg = 0, fb = 0; for (var i = 0; i < Function.Expression.Terms.Count; i++) { if (Function.Expression.Terms[i].Type != TermType.Number) { return(Color.Black); } switch (i) { case 0: fr = GetRGBValue(Function.Expression.Terms[i]); break; case 1: fg = GetRGBValue(Function.Expression.Terms[i]); break; case 2: fb = GetRGBValue(Function.Expression.Terms[i]); break; } } return(Color.FromArgb(fr, fg, fb)); } if ((Function.Name.ToLower().Equals("hsl") && Function.Expression.Terms.Count == 3) || (Function.Name.Equals("hsla") && Function.Expression.Terms.Count == 4)) { int h = 0, s = 0, v = 0; for (var i = 0; i < Function.Expression.Terms.Count; i++) { if (Function.Expression.Terms[i].Type != TermType.Number) { return(Color.Black); } switch (i) { case 0: h = GetHueValue(Function.Expression.Terms[i]); break; case 1: s = GetRGBValue(Function.Expression.Terms[i]); break; case 2: v = GetRGBValue(Function.Expression.Terms[i]); break; } } var hsv = new HSV(h, s, v); return(hsv.Color); } } else { try { var color = (KnownColor)Enum.Parse(typeof(KnownColor), Value, true); return(Color.FromKnownColor(color)); } catch { ; } } if (hex.Length == 3) { hex = hex.Aggregate("", (current, c) => current + (c.ToString(CultureInfo.InvariantCulture) + c.ToString(CultureInfo.InvariantCulture))); } var r = DeHex(hex.Substring(0, 2)); var g = DeHex(hex.Substring(2, 2)); var b = DeHex(hex.Substring(4)); return(Color.FromArgb(r, g, b)); }
/// <summary> /// Converts HEX, functions, or known colors to a Color object /// </summary> /// <returns>The Color</returns> public Color ToColor() { var hex = "000000"; if (Type == TermType.Hex) { if ((Value.Length == 7 || Value.Length == 4) && Value.StartsWith("#")) { hex = Value.Substring(1); } else if (Value.Length == 6 || Value.Length == 3) { hex = Value; } } else if (Type == TermType.Function) { if ((Function.Name.ToLower().Equals("rgb") && Function.Expression.Terms.Count == 3) || (Function.Name.ToLower().Equals("rgba") && Function.Expression.Terms.Count == 4)) { int fr = 0, fg = 0, fb = 0; for (var i = 0; i < Function.Expression.Terms.Count; i++) { if (Function.Expression.Terms[i].Type != TermType.Number) { return Color.Black; } switch (i) { case 0: fr = GetRGBValue(Function.Expression.Terms[i]); break; case 1: fg = GetRGBValue(Function.Expression.Terms[i]); break; case 2: fb = GetRGBValue(Function.Expression.Terms[i]); break; } } return Color.FromArgb(fr, fg, fb); } if ((Function.Name.ToLower().Equals("hsl") && Function.Expression.Terms.Count == 3) || (Function.Name.Equals("hsla") && Function.Expression.Terms.Count == 4)) { int h = 0, s = 0, v = 0; for (var i = 0; i < Function.Expression.Terms.Count; i++) { if (Function.Expression.Terms[i].Type != TermType.Number) { return Color.Black; } switch (i) { case 0: h = GetHueValue(Function.Expression.Terms[i]); break; case 1: s = GetRGBValue(Function.Expression.Terms[i]); break; case 2: v = GetRGBValue(Function.Expression.Terms[i]); break; } } var hsv = new HSV(h, s, v); return hsv.Color; } } else { try { var color = (KnownColor)Enum.Parse(typeof(KnownColor), Value, true); return Color.FromKnownColor(color); } catch { ; } } if (hex.Length == 3) { hex = hex.Aggregate("", (current, c) => current + (c.ToString(CultureInfo.InvariantCulture) + c.ToString(CultureInfo.InvariantCulture))); } var r = DeHex(hex.Substring(0, 2)); var g = DeHex(hex.Substring(2, 2)); var b = DeHex(hex.Substring(4)); return Color.FromArgb(r, g, b); }