最快/最简单的方法是根据系统在可见光谱中的位置对System.Media.Colors中的颜色进行排序(红色到蓝色或蓝色到红色无关紧要)?
编辑:
以下是排序结果(色调 - >饱和度 - >亮度):
这可能在技术上是正确的,但在视觉上它仍然不是。有人可以说明问题是什么吗?
答案 0 :(得分:4)
您希望按色调对颜色进行排序。为此,您需要计算颜色的色调,而Wpf System.Media.Color
结构不包含为您执行此操作的属性。
您有两种选择:
System.Drawing.Color.GetHue
。较旧的winforms-era System.Drawing
颜色结构确实支持计算色调。这使得代码非常简单;像System.Drawing.Color.FromArgb(col.R, col.G, col.B).GetHue()
这样的东西就足够了 - 好又短!但是,它确实意味着你将处理两个具有相同名称的结构,你当然需要引用System.Drawing.dll
程序集。这种方法往往很慢并且需要进行大量的理智检查,因此如果性能至关重要,那么这种方法的吸引力就会降低。色彩空间是三维的。虽然您可以沿一个方向排序(例如色调,此处),但如果您保持另外两个方向(HSB模型中的饱和度和亮度)不变,则生成的颜色序列将仅显示为连续。这就是为什么大多数拾色器选择二维表示的原因,但即使这样,你必须在给定的颜色选择器中保持一个维度不变,以保持连续的渐变。
答案 1 :(得分:0)
NVM提到了mono作为可能的解决方案,事实并非如此。问题是当前的显示技术。单声道强调了这个问题。看起来很棒的颜色,单色散布,反之亦然。这并不意味着不可能。只能在数学上完成。
使分类更加复杂,我们所有人都是色盲的,每个人之间的盲目性差异很大。数学将获取正确的排序,但是没有人能预言我们每个人都会看到的东西。
频谱≡音≈色相(((≡视觉皮层,≈内分泌补偿))
蓝色›› rgb(0,0,255)›› nCol B0,0%,0%
Ncol an,w%,b%›› a |(n +((((w + b)/ 2)/ cos((w + b)/ 2)
a |(((n + 1.w%)-(n + 1.b%))/ cos(wb)...而RGB的nCol扩展名是一种完美的,一对一的!