Как можно отнести цвет к одному из предопределенных цветов радуги? - 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;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы