попытка преобразовать rgb от .net Color до строки такой как “красный” или “синий”

* ngFor выставляет несколько переменных, которые вы можете увидеть здесь .

Нас интересует first:

  

. Имейте в виду, что yourConditionsToBeSelected() - это метод заполнителя, который вы должны создать при любых условиях (например, «не выбран ни один другой элемент»). ", или" этот элемент выбран ", или" selectedRep4Hour == rep4Hour ", что бы это ни значило) и получает логическое значение, указывающее, является ли это первый элемент или нет.

Любой дополнительный вопрос, просто дайте мне знать, и я уточню

8
задан Glorfindel 22 February 2019 в 23:02
поделиться

3 ответа

Если у Вас есть список известных цветов с именами, Вы видите, какой из тех известных окрашивает, данный целевой цвет является 'самым близким' к, с помощью функции 'близости' вроде (код F#):

let Diff (c1:Color) (c2:Color) =
    let dr = (c1.R - c2.R) |> int
    let dg = (c1.G - c2.G) |> int
    let db = (c1.B - c2.B) |> int
    dr*dr + dg*dg + db*db

Какой бы ни один из известных цветов имеет самую маленькую разность к целевому цвету, Вы хотите назвать, использовать то имя.

5
ответ дан 5 December 2019 в 17:42
поделиться

Я лично нахожу более естественным думать о цветах с точки зрения оттенка/насыщенности/яркости, чем значения RGB, и я думаю, что это работало бы хорошо на Вас в этом случае. Попробуйте это:

Присвойте названия цвета к определенным диапазонам спектра, как Вы считаете целесообразным. Например, возможно, красный 0-39, оранжевый 40-79, и т.д. (это - произвольные числа - я понятия не имею, соответствуют ли они на каком-либо виде масштаба или не). Затем вычислите оттенок от своего значения RGB (можно найти формулу здесь, хотя могут быть другие). После того как Вы знаете оттенок, Вы знаете, в каком диапазоне спектра это находится, и можно дать ему имя.

2
ответ дан 5 December 2019 в 17:42
поделиться

Ну, Красный/Зеленый/Синий довольно легки определить контролем; какой диапазон значений необходимо поддерживать?

Проблема состоит в том, что, если Вы не запускаете с именованного цвета, очень трудно возвратиться к одному; IsNamedColor возвратит false, даже если Вы создадите очевидный цвет через FromArgb.

Если Вам только нужны фактические ожидаемые стандартные цвета, Вы могли бы перечислить известные цвета через отражение?

        Color test = Color.FromArgb(255,0,0);
        Color known = (
                   from prop in typeof(Color)
                       .GetProperties(BindingFlags.Public | BindingFlags.Static)
                   where prop.PropertyType == typeof(Color)
                   let color = (Color)prop.GetValue(null, null)
                   where color.A == test.A && color.R == test.R
                     && color.G == test.G && color.B == test.B
                   select color)
                   .FirstOrDefault();

        Console.WriteLine(known.Name);

Вы могли бы также смочь использовать этот подход в качестве источника известных цветов для более сложного алгоритма.

0
ответ дан 5 December 2019 в 17:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: