在给定前景色和背景色的情况下,我如何计算第三种颜色

How can I calculate a THIRD color given a foreground and background color?

本文关键字:计算 颜色 三种 何计算 前景色 背景色 情况下      更新时间:2023-10-16

我再次问这个问题是因为我的第一次尝试被错误地标记为重复,我仍然希望有人能为我找到答案。

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

我不是在问如何根据背景颜色选择字体/文本颜色。这个问题肯定已经得到了回答。我需要做的是选择第三种颜色,当鼠标在上面时,用它来突出显示项目

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

有人愿意分享算法吗?

谢谢!

如果您想找到互补色(色轮上的相反色),可以将前景颜色转换为HSV空间(或许多其他颜色空间中的任何一个,如Y'CbCr、Y'IQ等),将色调分量旋转180°并转换回RGB。

正如您所怀疑的那样,如果背景颜色与结果颜色过于接近,则这可能不起作用。不过,这给了你一些选择。如果将两种颜色(fg和bg)都转换为HSV,则可以找到两种色调正好介于前景色和背景色之间的颜色。只需找到两种输入颜色色调之间的中间角度,即可获得第一种可能的颜色,然后再加180°,即可获得另一种可能的色彩。

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