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

问题描述 投票:1回答:1

[从图像列表中,我使用方法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));

这似乎不会产生彩虹,但更多的是从黑色到白色的效果。

我如何能够以产生彩虹的方式对它们进行排序?

c# colors gradient
1个回答
0
投票

如果先按Hue排序,然后按RGB排序,则应获得彩虹排序:

var orderedColorList = colorList
    .OrderBy(color => color.GetHue())
    .ThenBy(o => o.R * 3 + o.G * 2 + o.B * 1);
© www.soinside.com 2019 - 2024. All rights reserved.