我正在重新提出这个问题,因为我的第一次尝试被错误地标记为重复,我仍然希望有人可以为我找到答案。
我必须为C ++ / VCL应用程序中的特定控件编写自己的鼠标悬停代码。问题是,考虑到前景色和背景色的任何组合,如何计算高亮颜色以指示鼠标已超过该控件?
我不是问如何根据背景颜色选择字体/文字颜色。这个问题肯定得到了回答。我需要做的是选择第三种颜色用于在鼠标悬停时突出显示该项目。
我在想我可能想要做一些事情,比如拍摄背景颜色,在色轮上找到相反的颜色(我不知道该怎么做)。如果该颜色与文本颜色太接近(无论如何确定),请使其更亮或更暗。
有没有人有他们愿意分享的算法?
谢谢!
答案 0 :(得分:1)
如果要查找补色(色轮上相反),可以将前景色转换为HSV space(或任何其他颜色空间,如Y'CbCr,Y'IQ)等),将色调分量旋转180°并转换回RGB。
如您所料,如果背景颜色太靠近生成的颜色,则可能无效。但是,这给了你一些选择。如果将两种颜色(fg& bg)转换为HSV,则可以找到2种颜色,其色调恰好介于前景色和背景色之间。只需找到两种输入颜色色调中间的角度即可获得第一种颜色,然后再添加180°以获得另一种颜色。
但更大的问题是为什么你要设置选择颜色呢?你应该使用系统高亮颜色,除非你有充分的理由不这样做。