- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我不太了解颜色组合,所以我想出了这个算法,它会在试错的基础上根据字体颜色选择背景颜色:
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”),用户可以在其中选择字体颜色、粗细、字体等。我是但是有兴趣看看可以做什么,无论是 super 简单还是更复杂。
最终编辑
我决定采用 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();
}
}
最佳答案
有一些计算颜色亮度的方法,根据这些方法,您可以只采用黑色或白色背景,并且可以获得不错的可读性。参见 luma例如
Y = 0.2126 R + 0.7152 G + 0.0722 B
如果您使用标准化输入值 (0.0 - 1.0),我认为阈值为 0.5,但我已经有一段时间没有使用它了...
编辑:示例转换实现草图:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var c = (Color)value;
var l = 0.2126 * c.ScR + 0.7152 * c.ScG + 0.0722 * c.ScB;
return l < 0.5 ? Brushes.White : Brushes.Black;
}
阈值实际上可能有点取决于显示器和个人喜好,我个人更喜欢较低的东西,从而导致更大比例的黑色背景。
关于c# - 如何根据字体颜色选择背景颜色以获得适当的对比度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6763032/
这段代码在 Java 中的等价物是什么?我放了一部分,我对 I/O 部分感兴趣: int fd = open(FILE_NAME, O_WRONLY); int ret = 0; if (fd =
我正在尝试将维度为 d1,d2,d3 的张量 M[a1,a2,a3] reshape 为维度为 d2, d1*d3 的矩阵 M[a2,a1*a3]。我试过 M.reshape(d2,d1*d3) 但是
我是一名优秀的程序员,十分优秀!