Как выделить данный цвет в C # - PullRequest
0 голосов
/ 01 марта 2011

Как я могу выделить данный цвет в C #. Пользователь выбирает произвольный цвет для объектов, которые я показываю. Когда я выбираю объекты, я хотел бы выделить их.

Знаете ли вы, как лучше всего это сделать?

Мне нужно что-то вроде этого:

private Color HighLight(Color c)
{
  //calculate a highlight color from c
  return highlighted;
}

Заранее спасибо

Ответы [ 4 ]

5 голосов
/ 01 марта 2011

Стандартный способ выделить элемент - использовать цвет выделения системы.

Доступ к этому можно получить с помощью свойства SystemColors.Highlight , которое возвращает структуру Color, соответствующую цвету фона, который операционная система использует для выбранных элементов.

Основным преимуществом этого является то, что пользователь сразу распознает объект как выделенный . Выбор произвольного цвета не обязательно будет означать то, что вы намерены для него значить. Совместимость со всеми остальными программами на их компьютере в значительной степени повысит удобство использования и удобство использования вашего программного обеспечения.


РЕДАКТИРОВАТЬ: Если вы действительно настаиваете на использовании облегченной версии исходного цвета в качестве цвета подсветки, лучший способ рассчитать это преобразовать начальный цвет в альтернативное цветовое пространство, такое как HSV. Пространство RGB на самом деле не было разработано для манипулирования цветом, и облегчение значений трех компонентов RGB не всегда дает ожидаемый цвет. Я предоставляю образец кода здесь для этого преобразования.

Как только вы преобразовали цвет в цветовое пространство HSV, просто увеличьте его атрибут V (или «значение»), чтобы осветлить его, а затем преобразуйте его обратно в цвет RGB. Существует встроенный метод для создания структуры Color из значений компонентов RGB: Color.FromArgb

Обратите внимание, что цветовое пространство HSV также , известное как HSB (где «значение» изменяется на «яркость»). Они абсолютно эквивалентны во всех отношениях. Однако это не то же цветовое пространство, что и HSL, где L означает «легкость». Статья в Википедии предоставляет больше информации для любознательных.

2 голосов
/ 01 марта 2011

Вам необходимо преобразовать цвет RGB в HSL (см. запись ).Затем увеличьте значение L (яркость) и преобразуйте обратно в RGB.Изменение R, G, B напрямую не даст вам «естественного» вида выделенного цвета.Но все зависит от того, что вы будете делать в своем приложении.Конвертация дает лучший результат, но требует много кода.С другой стороны, изменение RGB напрямую будет работать очень быстро.

1 голос
/ 01 марта 2011

Вы можете увеличить каждый базовый цвет

private Color HighLight(Color c)
{
  var delta = 30;
  return Color.FromArgb(Math.Max(255, c.R + delta), Math.Max(255, c.G + delta), Math.Max(255, c.B + delta));
}
1 голос
/ 01 марта 2011

Это должно работать для вас:

private Color HighLight(Color c, int highlightfactor)
{
  //calculate a highlight color from c
  return Color.FromArgb(c.R + highlightfactor > 255 ? 255 : c.R + highlightfactor,
                        c.G + highlightfactor > 255 ? 255 : c.G + highlightfactor,
                        c.B + highlightfactor > 255 ? 255 : c.B + highlightfactor
    );
}

Чем выше highlightfactor, тем более светлый цвет вы получите.

...