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);
|
}
|
}
|
}
|