我需要确定选定的UIColor(由用户选择)是暗还是亮,因此我可以更改位于该颜色顶部的文本行的颜色,以提高可读性.
这是Flash/Actionscript中的一个示例(带演示):http://web.archive.org/web/20100102024448/http://theflashblog.com/?p = 173
有什么想法吗?
干杯,安德烈
UPDATE
感谢大家的建议,这是工作代码:
- (void) updateColor:(UIColor *) newColor
{
const CGFloat *componentColors = CGColorGetComponents(newColor.CGColor);
CGFloat colorBrightness = ((componentColors[0] * 299) + (componentColors[1] * 587) + (componentColors[2] * 114)) / 1000;
if (colorBrightness < 0.5)
{
NSLog(@"my color is dark");
}
else
{
NSLog(@"my color is light");
}
}
Run Code Online (Sandbox Code Playgroud)
再次感谢 :)
我不太了解颜色组成,所以我想出了这个算法,它将根据试验错误基础上的字体颜色选择背景颜色:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我做了一些谷歌搜索,但我没有找到任何非常正式的关于可以计算背景颜色的不同方式,以获得与字体颜色良好的对比效果.
所以我的问题是:是否有更"正式"的方法来选择良好的背景以获得良好的对比?或者,您将如何处理选择背景颜色,其唯一目的是使文本尽可能可读,无论其字体颜色如何?
快速更新
更多上下文:我只是想显示一些文本的预览(例如"快速的棕色狐狸跳过懒狗"),用户在那里选择字体颜色,重量,字体等.然而我对此感兴趣看看可以做些什么,无论是超级简单还是更复杂.
最后编辑
我决定采用所H.B.建议的:它似乎与我尝试的所有颜色都很好,不像我之前的算法,前景并不总是与背景正确对比.我很想知道是否有一个公式可以为给定前景提供"最佳"背景,但是对于我需要的黑/白工作就好了.这是我当前形式的代码: …