我不知道如何问这个问题,但现在就去了。
我在屏幕上绘制一个填充的彩色矩形。颜色为R,G,B的形式
然后我想在矩形的顶部绘制文本,但是文本的颜色必须能够提供最佳的对比度,这意味着它是可读的。
示例:
如果我画一个黑色矩形,文字的明显颜色将是白色。
我现在尝试的是这个。我将此函数传递给矩形的颜色,然后返回一个反转的颜色,然后我将其用于文本。
它有效,但这不是最好的方式。
有什么建议吗?
// eg. usage: Color textColor = GetInverseLuminance(rectColor);
private Color GetInverseLuminance(Color color)
{
int greyscale = (int)(255 - ((color.R * 0.30f) + (color.G * 0.59f) + (color.B * 0.11f)));
return Color.FromArgb(greyscale, greyscale, greyscale);
}
答案 0 :(得分:3)
保证提供明显不同颜色的一种简单方法是切换RGB三元组的每个组件的最高位。
Color inverse(Color c)
{
return new Color(c.R ^ 0x80, c.G ^ 0x80, c.B ^ 0x80);
}
如果原始颜色为#1AF283,则“反向”为#9A7203。
对比度将是显着的。我不保证美学。
更新,2009/4/3:我尝试了这个和其他方案。结果为my blog。
答案 1 :(得分:2)
最易读的颜色是白色或黑色。最“舒缓”的颜色将是非白色或黑色的颜色,它将是一种与您的背景颜色略微对比的颜色。没有办法以编程方式执行此操作,因为它是主观的。你不会找到每个人最可读的颜色,因为每个人都会看到不同的东西。
答案 2 :(得分:2)
有关颜色的一些提示,特别是有关前景和背景并置的提示,例如文字。
人眼基本上是一个简单的镜头,因此一次只能有效地聚焦一种颜色。大多数现代相机中使用的镜头通过使用不同折射率的多个镜头(彩色镜头)来解决这个问题,这样所有的颜色都可以同时聚焦,但是人眼并不是那么先进。
出于这个原因,您的用户应该只需要一次专注于一种颜色来阅读文本。这意味着前景是彩色的,或者背景,但不是两者。这会导致一种通常称为振动的情况,其中眼睛在前景色和背景色之间快速移动焦点,试图解决形状,但它永远不会解决,形状永远不会聚焦,它会导致眼睛疲劳。
答案 3 :(得分:2)
您的功能将不起作用,因为它将返回完全相同的颜色。 (修改你的函数以返回黑色或白色会稍微改善一些事情)
总是让事物具有可读性的最佳方式是在其周围涂上黑色的白色文字,或者反过来。
通常首先在(x-1,y-1),(x + 1,y-1),(x + 1,y-1),(x + 1,x + 1)处绘制黑色文本来实现),然后是(x,y)的白色文字。
或者,您可以先绘制一个半透明的黑色块,然后在其上绘制非透明的白色文本。这可以确保您的背景和文本之间始终存在一定的对比度。
答案 4 :(得分:1)
(顺便说一下,你不需要.net,c#或asp.net标签)
答案 5 :(得分:1)
你需要学习一些色彩理论。一个名为“Color Wheel Pro”的程序很有趣,可以给你一般的想法。
基本上,您正在寻找给定颜色的免费颜色。
那就是说,我认为你会发现,虽然色彩理论有所帮助,但你仍需要人眼来微调。