【发布时间】:2011-10-09 10:24:31
【问题描述】:
我对颜色组合不太了解,所以我想出了这个算法,它会在试错的基础上根据字体颜色选择背景颜色:
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();
}
}
我对此进行了一些谷歌搜索,但我没有发现任何关于计算背景颜色以与字体颜色形成良好对比效果的不同方式的非常正式的内容。
所以我的问题是:是否有更“正式”的方法来选择一个好的背景以获得良好的对比度?或者,您将如何处理选择背景颜色,其唯一目的是让您的文本尽可能易读,无论其字体颜色如何?
快速更新
更多上下文:我只是想显示一些文本的预览(例如“快速棕色狐狸跳过懒狗”),用户可以在其中选择字体颜色、粗细、字体等。我是不管有兴趣看看可以做什么,无论是超级简单还是更复杂。
最终编辑
我决定采用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,因为不会有实现。
标签: c# wpf fonts colors contrast