【问题标题】:Sorting array of colors by palette [closed]按调色板对颜色数组进行排序[关闭]
【发布时间】:2011-12-22 16:29:18
【问题描述】:

我有颜色数组:

private static string[] Colors = new string[] {
    "#A2AD00", "#69963B", "#00B2C0", "#009697", "#A31A7E",
    "#7D0063", "#EEAF00", "#EC7A00", "#0097D4", "#006FB4"
};

如何按调色板对颜色进行排序?

对不起,令人困惑的问题。 我想按颜色组(绿色到绿色,红色到红色......)排列这些项目,并且每个组内的项目必须按颜色亮度排列。

(Link to color groups representation)

【问题讨论】:

  • 正如@sll 所说,如果不知道您是否应该考虑红色“大于”蓝色等等,就无法建设性地回答这个问题。
  • 获取R、G、B,并按最高分组。大致按原色分组。对于亮度,按灰度 (0.299 * R + 0.587 * G + 0.114 * B) 排序。
  • 这个问题不应该被否决。我需要为我的游戏收集调色板数据的能力,最后得到了一些你可能会觉得有用的代码(虽然它使用 GetPixel,因此没有优化):pastebin.com/mfSNsHKp

标签: c# .net sorting colors


【解决方案1】:

您可以尝试使用颜色列表而不是字符串数组。下面的排序函数对彩虹的颜色进行排序。

List<Color> myColors = new List<Color>();

向列表中添加颜色

myColors.Add (new Color (r,g,b))

colors.Sort(delegate(System.Drawing.Color left, System.Drawing.Color right)
{
  return left.GetBrightness().CompareTo(right.GetBrightness ());
});

【讨论】:

    【解决方案2】:

    你有一个字符串数组,而不是颜色。虽然这些字符串可以转换为颜色对象,但您无法从中获得调色板。

    在索引位图中使用调色板,以便索引 n 指向特定颜色;不是相反。除非您还知道从中获取颜色的索引位图,否则不会以其他方式进行转换。

    换句话说,对于您的问题; “按调色板排序”要有意义,您至少需要知道从中获取颜色的ColorPalette 对象。我猜你的意思是按调色板中的索引排序?在这种情况下,您可以在 Entries 数组中查找颜色以获取它们的索引;然后按该索引排序。

    【讨论】:

      【解决方案3】:

      怎么样

          Array.Sort(Colors );
          foreach (string s in Colors )
          {
              Console.WriteLine(s);
          }
      

      【讨论】:

        猜你喜欢
        • 2014-11-07
        • 1970-01-01
        • 2015-12-29
        • 1970-01-01
        • 1970-01-01
        • 2018-03-01
        • 2013-04-16
        • 2014-07-04
        • 1970-01-01
        相关资源
        最近更新 更多