选择着色算法

时间:2009-10-02 18:34:09

标签: algorithm colors

我正在尝试生成一种颜色,可以根据当前对象的颜色将项目突出显示为“已选择”。我已经尝试增加一些HSB值,但我无法想出一个通用的公式。特别是,使用白色时我遇到了问题(较亮的白色与常规白色看起来没什么不同)。没有要求说我需要让它更亮,所以某种“逆”颜色也会很好用。是否有任何标准的算法或技术来做这样的事情(我猜是的,但我找不到 - 我不确定是否有这个名字)?

感谢,

杰夫

4 个答案:

答案 0 :(得分:3)

可能是负面影响:

伪:

int red = originalColor.red
int green = originalColor.green
int blue = originalColor.blue

int newRed = 255 - red
int newGreen = 255 - green
int newBlue = 255 - blue

Color negativeColor = new Color(newRed, newGreen, newBlue)

或添加蓝色效果:

int red = originalColor.red
int green = originalColor.green
int blue = originalColor.blue

int newRed = 255 - red
int newGreen = 255 - green
int newBlue = 255 - blue + 100
if newBlue > 255 {
   newBlue = 255
   newRed = newRed - 50
   newGreen = newGreen - 50
   if newRed < 0 {newRed = 0}
   if newGreen < 0 {newGreen = 0}
}

Color negativeColor = new Color(newRed, newGreen, newBlue)

答案 1 :(得分:3)

您可以使用的一种技术是交换项目的前景(文本)颜色及其背景颜色。如果您的项目的文字和背景颜色已经具有令人愉悦的对比度,则所选项目应该继续看起来很好。

alt text
(来源:wordpress.com

当您将鼠标悬停在帖子中的标签上时,这就是此站点上使用的技术(Stack Overflow)。他们从LightBlue-on-LightBlue转向LightBlue-on-DarkBlue。试试看效果吧。

答案 2 :(得分:3)

如果你正在使用HSB,尝试将色调向上或向下移动最大值的一半,这应该给你“相反”的颜色(也称为补色)。然而,这对灰色光谱没有任何好处,灰色光谱没有色调,因此看起来相同。

如果你同时使用色调和亮度,你会得到一种“负面”,它适用于所有情况。一个真正的负面会让你“翻转”中点周围的亮度值,但这不适用于中灰色,它仍然是中灰色。

并不总是能够使颜色更亮(白色怎么做?),所以如果你正在寻找对比度,那么将色调和亮度移动一半是最可靠的。

答案 3 :(得分:0)

您可能会在http://www.easyrgb.com/找到工具,为您提供一些想法。