根据亮度或YIQ刻度对C#中的颜色进行排序

时间:2015-07-09 11:54:14

标签: c# .net colors

我正在寻找根据亮度对我们项目中的一些颜色进行排序,所以我可能需要根据颜色进行YIQ表示。

所以我非常期待在C#中寻找一些给定RGB格式颜色的YIQ表示

我在wiki和其他一些网站上发现了这个公式,用于从RGB转换为YIQ比例:

这是RGB - > YIQ转换:

[ Y ]     [ 0.299   0.587   0.114 ] [ R ]
[ I ]  =  [ 0.596  -0.275  -0.321 ] [ G ]
[ Q ]     [ 0.212  -0.523   0.311 ] [ B ]

但是现在如何从这个公式得到的Y,I和Q值中获取C#中的Color值。

所以,如果我有这种颜色:#FF832727是RGB格式,如何以YIQ比例获得相应的颜色。

2 个答案:

答案 0 :(得分:2)

可能的实施,如果我理解你的权利

List<Color> colors = new List<Color> {
  Color.Wheat,
  Color.Black,
  Color.Red,
  Color.FromArgb(unchecked ((int)0xFF832727U))
};

// You don't need convert colors into YIQ (i.e. matrix multiplication)
// just compare brightness (Y component)
colors.Sort((Comparison<Color>) (
  (Color left, Color right) => 
     (left.R * 299 + left.G * 587 + left.B * 114).CompareTo(
      right.R * 299 + right.G * 587 + right.B * 114)
  ));

答案 1 :(得分:1)

亮度方法已经在Color类方法中。

var colorList = new List<System.Drawing.Color>
{ Color.Red, Color.Green, Color.Blue};
colorList.Sort((color1, color2) =>
(color1.GetBrightness()).CompareTo(color2.GetBrightness()));