namespace Yw.WpfUI.Hydro
{
///
/// 颜色拓展
///
internal static class ColorExtensions
{
///
/// ToMediaColor
///
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);
}
}
}