lixiaojun
2025-04-03 2e52f10a2cccb1471859b05e0d0e9dd9649859c8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
namespace Yw.WpfUI.Hydro
{
    /// <summary>
    /// 颜色拓展
    /// </summary>
    internal static class ColorExtensions
    {
        /// <summary>
        /// ToMediaColor
        /// </summary>
        public static Color ToMediaColor(this string htmlColor)
        {
            if (string.IsNullOrEmpty(htmlColor))
            {
                return default;
            }
 
            // 处理命名颜色
            if (!htmlColor.StartsWith("#"))
            {
                var color = (Color)ColorConverter.ConvertFromString(htmlColor);
                return color;
            }
 
            // 处理#RGB或#ARGB格式
            htmlColor = htmlColor.TrimStart('#');
 
            if (htmlColor.Length == 3) // #RGB → #RRGGBB
            {
                htmlColor = $"{htmlColor[0]}{htmlColor[0]}{htmlColor[1]}{htmlColor[1]}{htmlColor[2]}{htmlColor[2]}";
            }
            else if (htmlColor.Length == 4) // #ARGB → #AARRGGBB
            {
                htmlColor = $"{htmlColor[0]}{htmlColor[0]}{htmlColor[1]}{htmlColor[1]}{htmlColor[2]}{htmlColor[2]}{htmlColor[3]}{htmlColor[3]}";
            }
 
            if (htmlColor.Length != 6 && htmlColor.Length != 8)
            {
                return default;
            }
 
            var a = htmlColor.Length == 8 ? Convert.ToByte(htmlColor.Substring(0, 2), 16) : (byte)255;
            var r = Convert.ToByte(htmlColor.Substring(htmlColor.Length - 6, 2), 16);
            var g = Convert.ToByte(htmlColor.Substring(htmlColor.Length - 4, 2), 16);
            var b = Convert.ToByte(htmlColor.Substring(htmlColor.Length - 2, 2), 16);
 
            return Color.FromArgb(a, r, g, b);
        }
    }
}