C# - 如何按彩虹顺序排列颜色列表?

Tho*_*hom 3 c# gradient colors

我使用与此类似的方法从图像列表中计算了平均颜色。我现在有一个列表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));
Run Code Online (Sandbox Code Playgroud)

这似乎并没有创造出彩虹,而更多的是从黑到白的效果。

我怎样才能以形成彩虹的方式对它们进行排序?

Ruf*_*s L 5

如果您按第一个顺序Hue,然后按顺序RGB顺序,您应该得到彩虹顺序:

var orderedColorList = colorList
    .OrderBy(color => color.GetHue())
    .ThenBy(o => o.R * 3 + o.G * 2 + o.B * 1);
Run Code Online (Sandbox Code Playgroud)

使用混合的彩虹色集合,这似乎可以解决问题:

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);
}
Run Code Online (Sandbox Code Playgroud)

输出

在此输入图像描述