C# - 如何按照彩虹的顺序排列颜色列表?
C# - How do I order a list of colors in the order of a rainbow?
根据图像列表,我使用一种方法 similar to this 计算了平均颜色。我现在有一个 System.Drawing.Color
的列表,但我不确定如何以看起来像彩虹的方式对它们进行排序。
这是我尝试过的简单方法(为了示例目的略有改动):
var colorList = new List<Color>
{
Color.Red,
Color.Purple,
Color.Black,
Color.Blue,
Color.Green,
Color.LightGreen,
Color.LightSkyBlue,
Color.Yellow
};
var orderedColorList =
colorList.OrderBy(o => (o.R * 3 + o.G * 2 + o.B * 1));
这似乎不会产生彩虹,但更多的是从黑到白的效果。
我怎样才能以产生彩虹的方式对它们进行排序?
如果你先按 Hue
排序,然后 RGB
,你应该得到彩虹排序:
var orderedColorList = colorList
.OrderBy(color => color.GetHue())
.ThenBy(o => o.R * 3 + o.G * 2 + o.B * 1);
使用混合的彩虹色集合,这似乎可以解决问题:
var colorList = new List<Color>
{
Color.LightSkyBlue,
Color.Red,
Color.Yellow,
Color.Purple,
Color.Orange,
Color.Blue,
Color.Green
};
var orderedColorList = colorList
.OrderBy(color => color.GetHue())
.ThenBy(o => o.R * 3 + o.G * 2 + o.B * 1);
foreach (var color in orderedColorList)
{
Console.WriteLine(color.Name);
}
输出
根据图像列表,我使用一种方法 similar to this 计算了平均颜色。我现在有一个 System.Drawing.Color
的列表,但我不确定如何以看起来像彩虹的方式对它们进行排序。
这是我尝试过的简单方法(为了示例目的略有改动):
var colorList = new List<Color>
{
Color.Red,
Color.Purple,
Color.Black,
Color.Blue,
Color.Green,
Color.LightGreen,
Color.LightSkyBlue,
Color.Yellow
};
var orderedColorList =
colorList.OrderBy(o => (o.R * 3 + o.G * 2 + o.B * 1));
这似乎不会产生彩虹,但更多的是从黑到白的效果。
我怎样才能以产生彩虹的方式对它们进行排序?
如果你先按 Hue
排序,然后 RGB
,你应该得到彩虹排序:
var orderedColorList = colorList
.OrderBy(color => color.GetHue())
.ThenBy(o => o.R * 3 + o.G * 2 + o.B * 1);
使用混合的彩虹色集合,这似乎可以解决问题:
var colorList = new List<Color>
{
Color.LightSkyBlue,
Color.Red,
Color.Yellow,
Color.Purple,
Color.Orange,
Color.Blue,
Color.Green
};
var orderedColorList = colorList
.OrderBy(color => color.GetHue())
.ThenBy(o => o.R * 3 + o.G * 2 + o.B * 1);
foreach (var color in orderedColorList)
{
Console.WriteLine(color.Name);
}
输出