加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 每次都创建相同颜色对应数组的算法?

发布时间:2020-12-16 01:47:17 所属栏目:百科 来源:网络整理
导读:对于我的程序,我试图创建一个函数,它将生成一个颜色数组(每次应该是相同的,所以没有随机性),其中每种颜色与其他颜色有很大不同. 你为什么要问?好吧,因为用户可以向用户控件添加自定义项目,并且通过添加每个项目,项目应该与特定颜色相关联. 显然这会很糟糕:
对于我的程序,我试图创建一个函数,它将生成一个颜色数组(每次应该是相同的,所以没有随机性),其中每种颜色与其他颜色有很大不同.

你为什么要问?好吧,因为用户可以向用户控件添加自定义项目,并且通过添加每个项目,项目应该与特定颜色相关联.

显然这会很糟糕:

Red
Dark Red
Light Red
Pink

因为在视觉上所有这些在色彩和颜色上非常相似,并且用户将无法区分它们.理想情况下,函数会产生如下所示:

Red
Dark Green
Light Cyan
Orange

在这种情况下,每种颜色与其他颜色大不相同,并且用户可以容易地在视觉上区分它们.

但是,我在提出一个执行此操作的算法时遇到了一些麻烦.我知道我想使用Color.FromArgb,但我不确定如何构造循环,其中每个项目与其他项目有很大不同,但每次运行该函数时都是相同的.模数运算符可能会有所帮助.我一直在使用不同的方法,但每个方法总是有一个颜色太过类似于数组中的另一种颜色.我想用循环来做这件事,但这似乎暗示了一种模式以及所有颜色之间的色调,色调或亮度的相似性.

我想我可以硬编码大量的值,但我真的不想…… = X.

好吧,如果您有任何想法,请告诉我!谢谢!!

解决方法

可能有一个非常酷的方法,但如果没有人,你可以很容易地蛮力.您可以尝试的是尽可能地将RGB值空间分开.一个缺点是你可能会得到一些花哨的颜色.我认为你可以通过抵消来解决这个问题,但是你需要进行一些测试.

例如….

8种宽间距的颜色看起来像这样.请注意,D0和50相距80或者宽到8位空间,但提供的选项与00和80不同,IMO是可怕的颜色.

D0D0D0
50D0D0
D050D0
D0D050
5050D0
50D050
D05050
505050

如果需要更多颜色,可以缩小间距.对于每个单词,所有具有3个8位值而不是2个值的排列将给出27个变体(3 ^ 3),这在大多数情况下应该足够.在这种情况下,将您的数字空间大约相隔55(十六进制). 4个8位值变为64种颜色(4 ^ 3),这当然可以.

我看到的唯一另一个问题是,一些较暗的颜色很难区分,所以你可能想要将你的价值观欺骗到较轻的一端.但我认为,如果你只是跳过最暗的颜色(它将是深灰色),其他颜色应该全部工作并且相互之间可以区分.

一旦确定在三个单词中旋转哪些值,生成颜色的算法应该相当简单.

最后注意:我重申这是快速和肮脏的,我推迟到任何人可以指出的现有方法.只是试图给OP一个可能足够的选项.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读