C#圆形颜色到列表中的颜色

Ent*_*ity 4 c# colors rounding

我有一个HEX格式的颜色列表:

String[] validcolors = new String[]
{
    "0055A5",
    "101010",
    "E4D200",
    "FFFFFF",
    "006563",
    "A97B3E",
    "B80000",
    "6E3391",
    "D191C3",
    "D68200",
    "60823C",
    "AA8D73",
    "73A1B8",
    "6E6D6E",
    "00582C",
    "604421"
};    
Run Code Online (Sandbox Code Playgroud)

和一个颜色对象:

Color c = ...
Run Code Online (Sandbox Code Playgroud)

我想找到的颜色最接近cvalidcolors.有人可以帮帮我吗?我最初的想法是"最接近RGB值",但无论什么工作都没问题.

man*_*nji 6

我会考虑将十六进制转换为.NET颜色,然后计算somr距离((x2-x1)²+(y2-y1)²)并使用此距离取最近值:

string closestColor = "";
double diff = 200000; // > 255²x3

foreach(string colorHex in validColors)
{
    Color color = System.Drawing.ColorTranslator.FromHtml("#"+colorHex);
    if(diff > (diff = (c.R - color.R)²+(c.G - color.G)²+(c.B - color.B)²))
        closestColor = colorHex;
}

return closestColor;
Run Code Online (Sandbox Code Playgroud)