コード例 #1
0
ファイル: Term.cs プロジェクト: Piedone/ExCSS
        /// <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));
        }
コード例 #2
0
ファイル: Term.cs プロジェクト: RussPAll/ExCSS
        /// <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);
        }