我对颜色组合不是很了解,所以我想出了这个算法,根据试错的方法选择基于字体颜色的背景颜色:
public class BackgroundFromForegroundColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is Color))
return value;
Color color = (Color)value;
if (color.R + color.G + color.B > 550)
return new SolidColorBrush(Colors.Gray);
else if (color.R + color.G + color.B > 400)
return new SolidColorBrush(Colors.LightGray);
else
return new SolidColorBrush(Colors.White);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我在谷歌上搜索了一下,但没有找到关于如何通过不同的方式计算背景颜色以达到良好对比效果的正式信息。因此我的问题是: 是否有更"正式"的方法来选择一个良好的背景颜色以获得良好的对比度? 或者,如果希望文本无论其字体颜色如何都尽可能易读,您会如何选择背景颜色?
快速更新
更多的背景: 我只是试图显示一些文本的预览(例如 "The quick brown fox jumps over the lazy dog"),其中用户选择字体颜色、字体重量、字体等。然而,我对于能够做什么感兴趣,无论它是超级简单,还是更复杂。
最终编辑
我决定采用H.B.提出的方法: 它似乎可以很好地处理我尝试的所有颜色,而我的先前算法中前景与背景的对比度不总是正确的。我很想知道是否有公式可以给出给定前景色的"最佳"背景色,但对于我所需的黑/白结果非常好。这是我的当前代码形式:
public class BackgroundFromForegroundColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is Color))
return value;
Color color = (Color)value;
double Y = 0.2126 * color.ScR + 0.7152 * color.ScG + 0.0722 * color.ScB;
return Y > 0.4 ? Brushes.Black : Brushes.White;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
ConvertBack
应该抛出NotSupportedException
异常,因为它将没有实现。 - H.B.