获取图标主色并从列表中选择预定义颜色

时间:2015-08-06 19:45:26

标签: c# image colors icons microsoft-metro

我有问题,我需要弄清楚图标的主要颜色,并选择了"最近的" c#中列表中的颜色。

首先我有一个带颜色的列表,例如:

  1. R:176,G:30,B:0
  2. R:114,G:0,B:172
  3. R:25,G:153,B:0
  4. R:255,G:183,B:0
  5. ...
  6. 我有一个图标列表:

    1. 新文件
    2. 保存
    3. 文件夹/目录
    4. ...
    5. 现在我想在每个图标中获取主色,而不是获得颜色,这与预定义列表之一尽可能相似。

      我的第一个解决方案是,从每个图标像素中获取RGB值,然后通过像素的数量,然后我只得到一些棕色和灰色。

      是否有人有解决此问题的方法?

      非常感谢!

2 个答案:

答案 0 :(得分:1)

我有一个想法(假设我正确理解你的问题,如果我没有,请纠正我)。首先让我重新陈述我对你帖子的评论:

  

我猜你会得到奇怪的颜色,因为你是分别取每个颜色成分的平均值。理论上听起来不错,但如果您的图像中有许多不同的颜色,它可能会摒弃您的答案。假设您的图标是每个255 R,255 G和255 B的33%......您的“颜色”将是每个的约85%(也称为深灰色)。就平均而言,这不是必须的。

所以这是我提出的技术(再次,假设我明白你是最常见的颜色,而不是平均颜色):
您可以做的是,使用一些误差范围(比较RBG值)存储(以您认为合适的任何结构)列表中的哪种颜色与每个像素“最接近”。然后,在考虑了所有像素并将其“投票”应用于您的数据结构后,请查看列表中哪种颜色与该颜色关联的大多数像素。然后那种颜色就是“赢家”。

答案 1 :(得分:1)

你得到的是平均颜色 - 对于大多数图像来说,这是一种棕灰色。听起来你想要的是最“常见”的颜色 - 尝试制作一个Dictionary<color, int>并在循环浏览图像中的每个像素时,检查颜色是否在字典中有一些误差(10%可能) ?)如果是,则在字典中增加该值,如果没有,则将其添加到字典中。