根据颜色在可见光谱中的位置(红色到蓝色或蓝色到红色无关紧要)对 System.Media.Colors 中的颜色进行排序的最快/最简单的方法是什么?
编辑:
这是排序的结果(色调->饱和度->亮度):
这在技术上可能是正确的,但在视觉上仍然不是。有人可以阐明问题所在吗?
最佳答案
您似乎想按色调对颜色进行排序。为此,您需要计算颜色的色调,而 Wpf System.Media.Color
结构不包含为您执行此操作的属性。
你有两个选择:
- 您可以手动计算色调。这并不难,但很困惑:大量的 if-then 语句。执行此操作的示例代码 can be found on devx .这是更多的工作,但可读性较差,但可能是更快的选择。
- 您可以使用
System.Drawing.Color.GetHue
.较旧的 winforms 时代的System.Drawing
颜色结构确实支持计算色调。这使得代码非常简单;像System.Drawing.Color.FromArgb(col.R, col.G, col.B).GetHue()
之类的东西就足够了——又好又短!但是,这确实意味着您将处理两个具有相同名称的结构,并且您当然需要引用System.Drawing.dll
程序集。这类方法往往很慢,并且会进行大量健全性检查,因此如果性能至关重要,这可能不太有吸引力。
色彩空间是三维的。尽管您可以沿一个方向(例如此处的色调)排序,但只有在保持其他两个方向(HSB 模型中的饱和度和亮度)不变的情况下,生成的颜色序列才会显得连续。这就是大多数颜色选择器选择二维表示的原因,但即便如此,您也必须在给定的颜色选择器中保持一维不变,以保持连续的渐变。
关于c# - 根据可见光谱中的位置对 System.Media.Colors 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5430468/