【发布时间】:2011-11-14 15:04:34
【问题描述】:
对于我的程序,我正在尝试创建一个函数,该函数将生成一组颜色(每次都应该相同,因此没有随机性),其中每种颜色与其他颜色有很大不同。
你为什么要问?好吧,因为用户可以向用户控件添加自定义项,并且添加每个项后,项应该与特定颜色相关联。
显然这会很糟糕:
Red
Dark Red
Light Red
Pink
因为在视觉上,所有这些在色调和颜色上都非常相似,用户将无法区分它们。理想情况下,该函数会产生如下内容:
Red
Dark Green
Light Cyan
Orange
在这种情况下,每种颜色都与其他颜色有很大不同,用户可以很容易地从视觉上区分它们。
但是,我在想出一个可以做到这一点的算法时遇到了一些麻烦。我知道我想使用 Color.FromArgb 但我不确定如何构建每个项目与其他项目有很大不同但每次运行函数时都是相同的循环。模数运算符可能会有所帮助。我一直在使用不同的方法,但每种方法总是有一种颜色与数组中的另一种颜色过于相似。我想用一个循环来做,但这似乎暗示了一种图案和所有颜色之间的色调、色调或亮度的相似性。
我想我可以硬编码大量的值,但我真的不想这样做.. =X
好吧,如果你们有任何想法,请告诉我!谢谢!!
【问题讨论】:
-
您可能需要的不同颜色数量的上限是多少?
-
nycdan:问得好!我可能应该包括那个。它从 3 开始,并随着添加到用户控件的每个项目而增加 1。通常它会在我想象的 5-7 左右,但如果用户真的需要它,我希望最多支持 25-50 O_O
-
您需要每种颜色与序列中最近的邻居不同,还是与所有其他颜色不同?
-
Ted:最好与邻居有强烈的区别,随着项目距离的增加,区别会逐渐减弱。但理想情况下,在用户无法区分两者的情况下,没有两种颜色看起来足够相似。