86 lines
1.9 KiB
C#
86 lines
1.9 KiB
C#
using Avalonia.Media;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
|
|
namespace Toolkit.UI.Controls.Avalonia;
|
|
|
|
public class PersonPictureColourGenerator
|
|
{
|
|
private readonly string[] colours =
|
|
[
|
|
"#FFB900",
|
|
"#FF8C00",
|
|
"#F7630C",
|
|
"#CA5010",
|
|
"#DA3B01",
|
|
"#EF6950",
|
|
"#D13438",
|
|
"#FF4343",
|
|
"#E74856",
|
|
"#E81123",
|
|
"#EA005E",
|
|
"#C30052",
|
|
"#E3008C",
|
|
"#BF0077",
|
|
"#C239B3",
|
|
"#9A0089",
|
|
"#0078D7",
|
|
"#0063B1",
|
|
"#8E8CD8",
|
|
"#6B69D6",
|
|
"#8764B8",
|
|
"#744DA9",
|
|
"#B146C2",
|
|
"#881798",
|
|
"#0099BC",
|
|
"#2D7D9A",
|
|
"#00B7C3",
|
|
"#038387",
|
|
"#00B294",
|
|
"#018574",
|
|
"#00CC6A",
|
|
"#10893E",
|
|
"#7A7574",
|
|
"#5D5A58",
|
|
"#68768A",
|
|
"#515C6B",
|
|
"#567C73",
|
|
"#486860",
|
|
"#498205",
|
|
"#107C10",
|
|
"#767676",
|
|
"#4C4A48",
|
|
"#69797E",
|
|
"#4A5459",
|
|
"#647C64",
|
|
"#525E54",
|
|
"#847545",
|
|
"#7E735F"
|
|
];
|
|
|
|
public Color GenerateColour(string input)
|
|
{
|
|
byte[] hashBytes = GetHash(input);
|
|
int colourIndex = BitConverter.ToInt32(hashBytes, 0) % colours.Length;
|
|
colourIndex = Math.Abs(colourIndex);
|
|
|
|
return HexToColour(colours[colourIndex]);
|
|
}
|
|
|
|
private byte[] GetHash(string input)
|
|
{
|
|
return SHA256.HashData(Encoding.UTF8.GetBytes(input));
|
|
}
|
|
|
|
private Color HexToColour(string hex)
|
|
{
|
|
hex = hex.Replace("#", string.Empty);
|
|
|
|
byte a = 255;
|
|
byte r = byte.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber);
|
|
byte g = byte.Parse(hex.Substring(2, 2), System.Globalization.NumberStyles.HexNumber);
|
|
byte b = byte.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber);
|
|
|
|
return Color.FromArgb(a, r, g, b);
|
|
}
|
|
} |