如何在C#中突出显示给定的颜色

时间:2011-03-01 10:12:35

标签: c# .net winforms drawing

如何在C#中突出显示给定的颜色。用户为我正在显示的对象选择任意颜色。当我选择对象时,我想突出显示它们。

你知道最好的方法是什么吗?

我需要这样的东西:

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

提前致谢

4 个答案:

答案 0 :(得分:5)

突出显示项目的标准方法是使用系统突出显示颜色。

您可以使用SystemColors.Highlight property访问该内容,sample code here会返回与操作系统用于所选项目的背景颜色相对应的Color结构。

这样做的主要好处是用户立即将对象识别为突出显示。选择任意颜色并不一定意味着你想要的意思。与计算机上的所有其他程序保持一致将大大提高软件的可用性和用户体验。


编辑:如果你真的坚持使用原始颜色的减轻版本作为高亮颜色,那么计算它的最佳方法是将起始颜色转换为另一种颜色空间,如HSV。 RGB空间并非真正用于颜色操作,并且减轻颜色的3个RGB组件值并不总能产生您期望的颜色。我为此次转化提供了Color.FromArgb

将颜色转换为HSV颜色空间后,只需增加其V(或“值”)属性即可使其变亮,然后将其转换回RGB颜色。有一种内置方法可以从RGB组件值创建Color结构:The Wikipedia article

请注意,HSV色彩空间称为HSB(其中“值”更改为“亮度”)。它们在各方面都完全相同。然而,这与HSL不同,其中L代表“亮度”。 {{3}}为好奇者提供了更多信息。

答案 1 :(得分:2)

您需要将RGB颜色转换为HSL(请遵循此post)。然后增加L值(亮度)并转换回RGB。直接更改R,G,B不会让您“自然”看到突出显示的颜色。但一切都取决于你在申请中会做什么。转换可以获得最佳结果,但需要大量代码。另一方面,直接改变RGB将非常快速。

答案 2 :(得分:1)

这应该适合你:

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会给你一个较浅的颜色作为回报。

答案 3 :(得分:1)

您可以增加每种基色

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));
}