给定一个颜色作背景,怎么得到最好的前景色?

ccworld 2007-01-26 02:08:17
如背景RGB(0,0,0)
前景用RGB(0xFF,0xFF,0xFF),这样文字就比较清楚。

本来以为只要RGB三个分量各自作差(y = 0xFF - x),其实是不对的。

依稀记得以前老师上课提过这个问题。大家有知道这个的吗?
...全文
245 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨星 2007-01-26
  • 打赏
  • 举报
回复
又想出一种方案,嘿嘿。

对于任何一个颜色点,把它和三色立方体的中心点(127,127,127)相连,这条直线将于立方体的内切球交于两点,你取距离原来的点较远的那个点,效果应该不错,而且颜色的可能性也多多了。任何一个方向上都有。

对于中心点本身,你自己看着办吧- -b。
晨星 2007-01-26
  • 打赏
  • 举报
回复
当然,应用中“最大反差”肯定不一定最好。至少会太突兀。这也是为什么电脑上黑底的命令行窗口中所用的默认前景色并非(255,255,255)的原因吧。

最好的应该是看着最舒服的反差(比如适当强调一下Green?)。当然,这个可能结果不唯一,也看策略了。
晨星 2007-01-26
  • 打赏
  • 举报
回复
是只有8种,但是如果你只追求最大反差而不追求其它的话,我觉得也只有那8个点了。不可能比这8个点之一更大。
ccworld 2007-01-26
  • 打赏
  • 举报
回复
有点效果,但是这样的话

“三色立方体中那个离它最远的顶点”

前景颜色就只有8个颜色,似乎应该有更本质的规律。

http://www.easyrgb.com/harmonies.php#Result

这个地方的不知道他怎么计算的。
晨星 2007-01-26
  • 打赏
  • 举报
回复
不对不对,全反了。
算了,还是老老实实写条件表达式吧:

r1 = r > 127 ? 0 : 255;
g1 = g > 127 ? 0 : 255;
b1 = b > 127 ? 0 : 255;
晨星 2007-01-26
  • 打赏
  • 举报
回复
你试试看。
晨星 2007-01-26
  • 打赏
  • 举报
回复
我感觉应该是三色立方体中那个离它最远的顶点。

比如对于原来的颜色(r, g, b),那么反差最大的新点(r1, g1, b1)应该满足:

r1 = (r / 128) * 255; //要么是0,要么是255
g1 = (g / 128) * 255;
b1 = (b / 128) * 255;

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧