Как можно отнести цвет к одному из предопределенных цветов радуги? - C#
Формулировка задачи:
Всем привет.
Посоветуйте алгоритм как можно отнести цвет к одному из предопределенных цветов радуги.
(Каждый Охотник Желает Знать Где Сидит Фазан)
Я понимаю что будут средние, но ведь все равно он к какому-то ближе.
Заранее спс.
Решение задачи: «Как можно отнести цвет к одному из предопределенных цветов радуги?»
textual
Листинг программы
using System;
using System.Drawing;
using System.Linq;
namespace ConsoleApplication14
{
class Program
{
static void Main()
{
var color = Color.FromArgb(255, 12, 244, 241);
var name = GetColorName(color);
Console.WriteLine(name);
}
private static string GetColorName(Color color)
{
var knownColors = (KnownColor[]) Enum.GetValues(typeof(KnownColor));
Color[] colors = new Color[knownColors.Length];
for (int i = 0; i < colors.Length; i++)
{
colors[i] = Color.FromKnownColor(knownColors[i]);
}
var closest = GetClosestColor(colors, color);
return closest.Name;
}
private static Color GetClosestColor(Color[] colorArray, Color baseColor)
{
var colors = colorArray.Select(x => new { Value = x, Diff = GetDiff(x, baseColor) }).ToList();
var min = colors.Min(x => x.Diff);
return colors.Find(x => x.Diff == min).Value;
}
private static int GetDiff(Color color, Color baseColor)
{
int a = color.A - baseColor.A,
r = color.R - baseColor.R,
g = color.G - baseColor.G,
b = color.B - baseColor.B;
return a * a + r * r + g * g + b * b;
}
}
}