You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Connected.Components/Utilities/ColorManager.cs

114 lines
3.6 KiB

2 years ago
using System;
using System.Globalization;
using System.Diagnostics.CodeAnalysis;
namespace Connected.Utilities
{
[ExcludeFromCodeCoverage]
[Obsolete("Use MudColor instead.", true)]
public class ColorManager
{
public static System.Drawing.Color FromHex(string hex)
{
FromHex(hex, out var a, out var r, out var g, out var b);
return System.Drawing.Color.FromArgb(a, r, g, b);
}
// amount is between 0.0 and 1.0
public static System.Drawing.Color ColorLighten(System.Drawing.Color rgbColor, double amount)
{
var hsl = ColorTransformation.RgBtoHsl(rgbColor);
hsl.L = Math.Max(0, Math.Min(1, hsl.L + amount));
return ColorTransformation.HsLtoRgb(hsl, rgbColor.A);
}
// amount is between 0.0 and 1.0
public static System.Drawing.Color ColorDarken(System.Drawing.Color rgbColor, double amount)
{
var hsl = ColorTransformation.RgBtoHsl(rgbColor);
hsl.L = Math.Max(0, Math.Min(1, hsl.L - amount));
return ColorTransformation.HsLtoRgb(hsl, rgbColor.A);
}
public static void FromHex(string hex, out byte a, out byte r, out byte g, out byte b)
{
hex = ToRgbaHex(hex);
if (hex == null || !uint.TryParse(hex, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var packedValue))
{
throw new ArgumentException("Hexadecimal string is not in the correct format.", nameof(hex));
}
a = (byte)(packedValue >> 0);
r = (byte)(packedValue >> 24);
g = (byte)(packedValue >> 16);
b = (byte)(packedValue >> 8);
}
public static string ToRgbaFromHex(string hex, double alpha)
{
var color = FromHex(hex);
return $"rgba({color.R},{color.G},{color.B}, {alpha.ToString(CultureInfo.InvariantCulture)})";
}
private static string ToRgbaHex(string hex)
{
hex = hex.StartsWith("#") ? hex.Substring(1) : hex;
if (hex.Length == 8)
{
return hex;
}
if (hex.Length == 6)
{
return hex + "FF";
}
if (hex.Length is < 3 or > 4)
{
return null;
}
var red = char.ToString(hex[0]);
var green = char.ToString(hex[1]);
var blue = char.ToString(hex[2]);
var alpha = hex.Length == 3 ? "F" : char.ToString(hex[3]);
return string.Concat(red, red, green, green, blue, blue, alpha, alpha);
}
public static string ColorRgbDarken(string hex)
{
var color = FromHex(hex);
color = ColorDarken(color, 0.075);
return $"rgb({color.R},{color.G},{color.B})";
}
public static string ColorRgbLighten(string hex)
{
var color = FromHex(hex);
color = ColorLighten(color, 0.075);
return $"rgb({color.R},{color.G},{color.B})";
}
public static string ColorRgb(string hex)
{
var color = FromHex(hex);
return $"rgb({color.R},{color.G},{color.B})";
}
public static string ColorRgbElements(string hex)
{
var color = FromHex(hex);
return $"{color.R},{color.G},{color.B}";
}
public static string ColorRgba(string hex, double alpha)
{
var color = FromHex(hex);
return $"rgba({color.R},{color.G},{color.B}, {alpha.ToString(CultureInfo.InvariantCulture)})";
}
}
}