如何根据前景色和背景色计算出第三种颜色?

时间:2016-01-05 00:02:07

标签: c++ colors highlight

我正在重新提出这个问题,因为我的第一次尝试被错误地标记为重复,我仍然希望有人可以为我找到答案。

我必须为C ++ / VCL应用程序中的特定控件编写自己的鼠标悬停代码。问题是,考虑到前景色和背景色的任何组合,如何计算高亮颜色以指示鼠标已超过该控件?

我不是问如何根据背景颜色选择字体/文字颜色。这个问题肯定得到了回答。我需要做的是选择第三种颜色用于在鼠标悬停时突出显示该项目。

我在想我可能想要做一些事情,比如拍摄背景颜色,在色轮上找到相反的颜色(我不知道该怎么做)。如果该颜色与文本颜色太接近(无论如何确定),请使其更亮或更暗。

有没有人有他们愿意分享的算法?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果要查找补色(色轮上相反),可以将前景色转换为HSV space(或任何其他颜色空间,如Y'CbCr,Y'IQ)等),将色调分量旋转180°并转换回RGB。

如您所料,如果背景颜色太靠近生成的颜色,则可能无效。但是,这给了你一些选择。如果将两种颜色(fg& bg)转换为HSV,则可以找到2种颜色,其色调恰好介于前景色和背景色之间。只需找到两种输入颜色色调中间的角度即可获得第一种颜色,然后再添加180°以获得另一种颜色。

但更大的问题是为什么你要设置选择颜色呢?你应该使用系统高亮颜色,除非你有充分的理由不这样做。