【问题标题】:Random background color for multiple foreground colors多种前景色的随机背景色
【发布时间】:2020-01-29 13:09:48
【问题描述】:

我需要为三种文本颜色生成视觉上令人愉悦的随机背景颜色:ARGB(255,255,255,255)ARGB(63,255,255,255)ARGB(255,0,0,0)。颜色为白色、不透明度为 0.25 的白色和黑色。我还没有看到关于 SO 或其他地方的示例,该示例将一种颜色与多种颜色进行比较以确定它们之间是否存在良好的对比度(仅在两种颜色之间进行比较)。我不完全了解色彩理论,所以我正在寻求帮助。

【问题讨论】:

标签: c# colors high-contrast


【解决方案1】:

与白色形成对比的颜色是任何深色。另一方面,与黑色形成对比的颜色是任何光。所以很难选择与白色和黑色形成对比的颜色。

它可能是某种平均灰色或任何其他具有相同亮度的颜色。

亮度可以用这个公式计算:

int brightness = (int)(0.30 * red + 0.59 * green + 0.11 * blue);

让我们将brightness 值固定为平均值(即128),并随机选择redgreen 值。然后我们可以计算blue

var random = new Random();
var red = random.Next(128);
var green = random.Next(128);
var blue = (int)(128 - 0.30 * red - 0.59 * green);

生成的颜色与黑色和白色形成鲜明对比。

【讨论】:

    【解决方案2】:

    首先,您需要让自己熟悉色彩空间,并决定怎样才能使随机颜色具有视觉吸引力。颜色基本上可以表示为three components in many different spaces。计算机的首选表示是 RGB,它是与颜色一致的红色、绿色和蓝色的数量。然而,对于人眼来说,HSV(色调、饱和度、值)可能更容易理解。在这个颜色空间中,饱和度表示颜色的“饱和度”程度,即灰度范围的饱和度为零,因为它实际上并不代表颜色。该值(或强度)将其视为亮度和色调,可以为您提供颜色所属的光谱方向(想想彩虹)。 alpha 值不是颜色本身的一部分,而是指定特定颜色如何与背景混合(即,生成的颜色计算为正面颜色与其 alpha 分量和背景颜色的加权和)

    现在,在选择视觉上更吸引人的颜色方面,这种颜色更加复杂,并且更多地取决于每个人的口味。您通常通过选择另一种在 HSV 颜色空间中距离足够大的颜色来实现高对比度颜色。事实上,选择两种成分之一相同(例如,饱和度和强度相同)但色调非常不同的颜色会给您一种与原始颜色形成高对比度的颜色。从 RGB 到 HSV 以及反之亦然的转换公式可以在 here 找到。希望这可以帮助。

    【讨论】:

      猜你喜欢
      • 2019-05-13
      • 2013-10-14
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      相关资源
      最近更新 更多