У меня есть приложение C#, в котором есть несколько местоположений, и каждое расположение имеет несколько узлов. Я пингую каждую локацию, и если она отвечает, то это ЗЕЛЕНЫЙ, оттенок ЗЕЛЕНОГО зависит от времени ответа; чем короче ответ, тем зеленее цвет.
Если ответ на пинг не получен, цвет будет КРАСНЫЙ.
Основываясь на количестве узлов для каждого местоположения и различных возможных цветах для каждого узла, я хочу придумать цвет для местоположения, который получается из цветов всех дочерних узлов, то есть смеси цветов его дочерних узлов.
Как я мог это сделать?
Элемент управления представляет собой TreeView.
Вы можете просто взять среднее значение каждого из значений R, G и B. Я не уверен, что было бы здорово, если бы одни были красными, а другие зелеными.
@PalleDue, на самом деле вопрос не в том, что хорошо, а в том, чтобы привлечь внимание операторов к тому факту, что он не зеленый, и, следовательно, расширить локацию для исследования.
Обычно при смешивании цветов удобнее работать с HSV, а не с RGB. Усреднение красного и зеленого проведет вас через желтый, что может быть полезной функцией. Возьмите редактор цветов, в котором есть ползунки для H, S и V, и поиграйте. Возможно, вы сможете придумать цвета, при которых вы сохраните S и V одинаковыми и просто перемещаете H, и все цвета, которые вы получаете при перемещении H, будут красивыми и разумными - это будет легко реализовать в коде.
Я был бы с этим очень осторожен. Смешение цветов может легко скрыть информацию и значительно затруднить идентификацию. Например, вы можете захотеть легко определить, есть ли в местоположении один или несколько красных узлов. Не говоря уже о цветовой слепоте. Для любой важной информации вы хотите использовать и цвет, и форму.
@JonasH, я думал об этом и добавлю индикатор/светодиод слева от текста и буду использовать цвета, можно использовать квадратный светодиод, чтобы не реагировать на красный, и круглый зеленый светодиод для здорового состояния.





Поскольку у вас здесь нет ответа, вот как я это делаю в JavaScript.
Надеюсь, вам не составит большого труда перейти на C#.
// Accepts two hex colors and returns a blended RGB color.
function BlendColors(C1,C2){
var R1=parseInt(C1.substring(1,3),16), G1=parseInt(C1.substring(3,5),16), B1=parseInt(C1.substring(5,7),16);
var R2=parseInt(C2.substring(1,3),16), G2=parseInt(C2.substring(3,5),16), B2=parseInt(C2.substring(5,7),16);
return 'rgb('+Math.round((R1+R2)/2)+','+Math.round((G1+G2)/2)+','+Math.round((B1+B2)/2)+')';}
Примечание: Альфа-каналы не учитываются.
Теоретически все, что вам нужно сделать, это усреднить три отдельных компонента R/G/B.
Обновлять:
Ну что вы знаете... хороший сайт выполняет языковые преобразования!
using System;
public static string BlendColors(string C1, string C2)
{
int R1 = Convert.ToInt32(C1.Substring(1, 2), 16);
int G1 = Convert.ToInt32(C1.Substring(3, 2), 16);
int B1 = Convert.ToInt32(C1.Substring(5, 2), 16);
int R2 = Convert.ToInt32(C2.Substring(1, 2), 16);
int G2 = Convert.ToInt32(C2.Substring(3, 2), 16);
int B2 = Convert.ToInt32(C2.Substring(5, 2), 16);
return $"rgb({Math.Round((R1 + R2) / 2.0)},{Math.Round((G1 + G2) / 2.0)},{Math.Round((B1 + B2) / 2.0)})";
}
Как насчет среднего значения RGB?