获取图标的主颜色并从列表中选择预定义的颜色
本文关键字:颜色 预定义 选择 列表 图标 获取 | 更新日期: 2023-09-27 18:06:48
我遇到了一个问题,我需要找出一个图标的主要颜色,并从c#的列表中选择了"最接近"的颜色。
首先我有一个颜色列表,例如:
- r: 176, g: 30, b: 0
- r: 114, g: 0, b: 172
- r: 25, g: 153, b: 0
- r: 255, g: 183, b: 0
- …
我有一个图标列表:
- 新文档
- 文件夹/目录
- …
现在我想得到每个图标的主要颜色,然后得到颜色,这是尽可能类似于预定义的列表之一。
我的第一个解决方案是,从每个图标像素获得RGB值,然后通过像素的数量划分,但然后我只得到一些棕色和灰色的颜色。
有人有解决这个问题的办法吗?非常感谢!
我有一个想法给你(假设我理解你的问题正确,纠正我,如果我不)。让我先重申一下我对你帖子的评论:
我猜你会得到奇怪的颜色,因为你分别取每个颜色成分的平均值。理论上听起来不错,但如果你的图像中有许多不同的颜色,它可能会让你的答案出错。假设你的图标是255r、255g和255b的33%……你的"颜色"大约是每种颜色的85%(也就是深灰色)。就平均而言,这并不一定是错的。
所以这是我建议的技巧(再次,假设我理解你是在寻找最常见的颜色,而不是平均颜色):
你所能做的就是使用一定的误差范围(比较RBG值)来存储(在你认为合适的结构中)列表中与每个像素"最接近"的颜色。然后,在计算了所有像素并将其"投票"应用到数据结构之后,查看列表中与该颜色相关的像素最多的颜色。那么这个颜色就是"赢家"
您得到的是平均颜色-对于大多数图像来说是棕色灰色。听起来你想要的是最"常见"的颜色——尝试制作一个Dictionary<color, int>
,当你循环遍历图像中的每个像素时,检查颜色是否在字典中有一定的误差范围(可能是10% ?),如果是,那么你在字典中增加该值,如果不是,那么你把它添加到字典中。