【问题标题】:An algorithm to create the same array of contrasting colors each time?每次创建相同对比色数组的算法?
【发布时间】: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:最好与邻居有强烈的区别,随着项目距离的增加,区别会逐渐减弱。但理想情况下,在用户无法区分两者的情况下,没有两种颜色看起来足够相似。

标签: c# algorithm colors


【解决方案1】:

如果您不想对值进行硬编码,请忘记 RGBA,看看色调如何影响 HLS 或 HLV 颜色空间中的颜色。

【讨论】:

    【解决方案2】:

    这可能有一个非常酷的方法,但如果没有人提出来,你可能很容易暴力破解它。您可以尝试将 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 一个可能就足够的选项。

    【讨论】:

    • 我在发布后注意到有许多类似的问题引用了这种方法,但也提供了可能对您有所帮助的代码示例。这是一个:stackoverflow.com/questions/309149/…
    • nycdan:嘿,不确定你是否还在,但我尝试实现它,但看起来不太好。这是我的代码:pastebin.com/82hk3kc8 这是屏幕截图:i.imgur.com/Ot1Xv.png有什么想法吗?
    • Kyle,尝试偏移颜色。首先使用绘图程序测试一些想法以节省时间。尝试其他组合,例如 38 和 A8,而不是 50 和 D0。如果这些都不起作用,那么这里可能还有一些其他的答案已经走得更远了。同样,您可能还需要去掉一些较深的颜色。
    • 凯尔,这个页面可能会有很大帮助:anychart.com/products/anychart/docs/users-guide/Palettes.html
    【解决方案3】:

    使用 Rich Newman 的 HSLColor class,您可以使用如下代码在色轮周围生成均匀的步数。有关更多详细信息,请参阅他的帖子,以 part 1 开头。

    private void button1_Click(object sender, EventArgs e)
    {
        listView1.Items.Clear();
    
        int step = 240 / comboBox1.SelectedIndex;
    
        for (int i = 0; i < 240; i += step)
        {
            HSLColor color = new HSLColor((double)i, 240, 120);
            listView1.Items.Add(i.ToString()).BackColor = color;
        }               
    }
    

    这会产生如图所示的颜色:

    【讨论】:

      【解决方案4】:

      这是一种不好的方法:取数字 0、1、2、... 并将它们直接转换为 RGB 值。这很糟糕,因为直到 2^n-1 的第一个数字仅在 B 分量的低位不同。

      这里有一个更好的方法:像以前一样从 0,1,2.... 开始计数,但是在计数后重新排序,这样低位就是 R 的高位, 2s 位是 G 的高位,... 8s 位又是 R 的第二高位,依此类推。现在,如果您生成例如2^9 个数字到 24 位 RGH 值,任何两个数字在至少一个组件中必须相差至少 32。

      【讨论】:

        【解决方案5】:

        问题与Generate distinctly different RGB colors in graphs基本相同

        在我对该问题的回答中,给出了用于颜色划分和元素图案化的代码解决方案。

        但是,实际上,您最好使用列表。虽然处理器密集,但您可以使用出色的颜色距离公式(如 LAB)生成这样的列表,使用 Delta2000 距离度量从黑色开始,并选择一个荒谬的随机猜测数(20k)并获得一个非常好的列表。而且你最终会得到比通过编程获得更好的不同颜色(尤其是考虑到颜色开始出现的速度有多快)。

        从左到右,从上到下。

        #FFFFFF
        #FCFD0C
        #FCA4FA
        #09DAFC
        #D86606
        #03883F
        #153CFD
        #AB0344
        #00FBB4
        #F9D2C0
        #5D4C01
        #7D7B86
        #0D5252
        #A29204
        #188EF7
        #370257
        #F4717C
        #D90DCB
        #9BB2A1
        #7F2B00
        #6DC50B
        #B8CBFB
        #034204
        #058E9E
        #534049
        #FEA912
        #F3FDFB
        #977DEA
        #06335A
        #E60E1F
        #676E58
        #2F0102
        #E3FEBC
        #725493
        #A9937C
        #926455
        #FDE5FE
        #03669E
        #B579A0
        #382000
        #0BB687
        #930177
        #D8C37C
        #FE966F
        #3D3E2E
        #A0F8ED
        #9D6B06
        #63760A
        #B5AAB6
        #ED167D
        #879D5C
        #001C07
        #117B6B
        #EFAFBB
        #90556F
        #83ADC0
        #22172C
        #516B73
        #1BB8B6
        #5B0036
        #9102CC
        #0B0AB0
        #03FC4E
        #700717
        #01252D
        #B48B8A
        #CEC8B8
        #798A86
        #96CB8B
        #FD5AC2
        #BAC500
        #41474F
        #6572A7
        #6A5F58
        #C48B47
        #C0525B
        #A45211
        #AE9FD3
        #FED019
        #D06E55
        #C0F85A
        #3E4F9B
        #2F613F
        #603D2E
        #877150
        #BCEBFE
        #619376
        #D96DFA
        #1C6CFE
        #5A3161
        #02B1FA
        #08AB3C
        #016800
        #A81C1F
        #9C4AFE
        #E6B380
        #85A1FB
        #CBE7D1
        #455315
        #723542
        #00073A
        #9072AD
        #32211F
        #5E5E74
        #28DCC1
        #FEF2CC
        #A7539A
        #C4CDD5
        #175066
        #764910
        #FE4209
        #8C8B6F
        #0AD36D
        #8091AB
        #FC8A26
        #533391
        #91CACA
        #A1A29E
        #4B9002
        #1D3F2E
        #404060
        #F8F08E
        #2E82AA
        #D2A716
        #EB88B0
        #7C6C1B
        #201C07
        #F1E6E5
        #D6A593
        #7E676E
        #DFC4FA
        #03727A
        #AB9C63
        #88A301
        #BF0172
        #FE0E55
        #695BD0
        #283104
        #65814C
        #1A988C
        #531A02
        #CFA4C6
        #AA744D
        #B6BD91
        #485A51
        #8B7C75
        #614F34
        #A9F5BE
        #A66D76
        #9B879A
        #8BCEFE
        #03B0CA
        #BFD579
        #232730
        #858440
        #72A3A2
        #CD4302
        #17E4E7
        #88463D
        #FE9A92
        #6B516E
        #161F70
        #B5513D
        #2F002B
        #C899FE
        #44202D
        #80C4A6
        #58776E
        #D46483
        #880D4B
        #68017C
        #A3AEC4
        #C286CC
        #E2E5FC
        #BEADA5
        #1C241F
        #678F9E
        #9456BC
        #2C4142
        #413508
        #CD003B
        #FDC3E9
        #EFCED2
        #B28405
        #45382D
        #FD4D48
        #FDD8A3
        #98ED83
        #72736F
        #02081D
        #8E6D8A
        #AFB357
        #6D82DF
        #65A86D
        #D38251
        #B40AA5
        #D1539E
        #BA62C5
        #302451
        #735054
        #676339
        #833697
        #1A010A
        #C5B08D
        #0637B8
        #5404DE
        #C1DCDB
        #B84E71
        #189BC6
        #FD17F3
        #5B310A
        #447B59
        #8A5E39
        #036E8B
        #7D3A66
        #0C9969
        #55091F
        #FE7331
        #AA340A
        #FCC465
        #496C32
        #BF8772
        #9D8145
        #687888
        #1A57D8
        #D5C9D9
        #787394
        #A19291
        #0D78CD
        #A6A58C
        #8EF1FD
        #3C4D2F
        #5C6064
        #95595B
        #C57675
        #0A4C7E
        #4ED49D
        #93BC5C
        #BF7103
        #006151
        #A1B9BA
        #ADAAFD
        #C9A8AB
        #4E2521
        #FEBBAF
        #0AFEEC
        #D3015B
        #F97A66
        #DA9099
        #54044F
        #78E800
        #558A88
        #5DAB98
        #94959E
        #D5DFB6
        #766AFD
        #7E5B06
        #595846
        #4F6480
        #F4FDE6
        #869A7F
        #5DA9FD
        #8F8BB2
        #7A2EFC
        #B709E6
        #012C28
        #BEBCDF
        #FE7AF0
        #D50D9A
        #E1D052
        #FDE9D5
        #203A49
        #5F610A
        #67A72B
        #402E45
        #1C1003
        #894928
        #022C07
        #860203
        #321201
        #748B0A
        #3B7B0B
        #DE8D01
        #6B42BA
        #FE4D98
        #943A58
        #CDE70C
        #CAA35D
        #D6FEF9
        #FEBA97
        #80FBD7
        #6B8168
        #B9AC0B
        #CD38FC
        #5A535A
        #BDC8B3
        #8A9BA1
        #745748
        #8BCBE0
        #A53F48
        #2D2926
        #555584
        #067138
        #11D92D
        #5E324A
        #6B99BC
        #3AC0EC
        #CC9873
        #F906B8
        #17233D
        #FBA467
        #BB6237
        #8E8B84
        #313A75
        #7D082F
        #396762
        #957C00
        #957A7F
        #549349
        #5C4A45
        #A3D424
        #722D1E
        #9491D7
        #8CB18A
        #487C89
        #DBEDFD
        #280318
        #4A0202
        #53C7D3
        #A1DAC9
        #450487
        #021A2A
        #020157
        #A1796C
        #7A7650
        #BF8EA2
        #3B3845
        #FEA3D5
        #484723
        #DBCEA7
        #004C29
        #CBC4C4
        #AD8EB7
        #7E6EC1
        #DAB9A0
        #64BC60
        #AACBA9
        #FDDB80
        #AD67EC
        #AB6188
        #6D0AAA
        #1D0832
        #24301E
        #4F4D49
        #38585D
        #394C64
        #94B8DC
        #D64D47
        #911C2C
        #426AB2
        #2EA1A7
        #D7DDD4
        #03F385
        #B1685C
        #2C581E
        #721757
        #6BC8BB
        #955902
        #FE4879
        #874B85
        #CFA4E5
        #471C3D
        #E1F790
        #E584C9
        #C1FEE1
        #95983E
        #DDBBCE
        #08BEA6
        #506A55
        #FBF7EA
        #837C6B
        #6F696F
        #524077
        #583D05
        #9A7E65
        #49236C
        #A382CC
        #B7BDB8
        #816B5D
        #6860A7
        #0C8281
        #466700
        #B4D1E8
        #DFDB9A
        #308B71
        #A33582
        #2B232B
        #5E82A8
        #F5B70B
        #716853
        #657138
        #059AE1
        #E9A24F
        #FE7198
        #D98F84
        #BBE4A7
        #CC0300
        #7C868D
        #A3A0BA
        #B09062
        #755F36
        #02BD0A
        #729488
        #573439
        #F6E108
        #544A5E
        #D45433
        #78DE90
        #C0AC55
        #42291C
        #776287
        #4B738D
        #011315
        #DD6CD3
        #868303
        #DA6EA3
        #024149
        #393D3A
        #120B15
        #E15964
        #525F39
        #D88029
        #455966
        #6F7B70
        #909B90
        #03B668
        #B19387
        #FEFDBD
        #AF6624
        #DDCBBF
        #0B6070
        #0C7051
        #DD3F68
        #A67C8D
        #5F6C68
        #4C361B
        #7B82BA
        #FE95AB
        #92D659
        #F3F5FD
        #049625
        #8AE0BA
        #606ED6
        #986F3D
        #B94586
        #B1933E
        #2F5548
        #AA6BA8
        #5DA1B1
        #9AA67C
        #647B7E
        #74465A
        #C03231
        #9F593B
        #714A2D
        #080F00
        #465BF9
        #708E3F
        #E0BBB3
        #DD6937
        #9EB92D
        #423A3B
        #666E87
        #8D5F9D
        #003C90
        #B39BB0
        #AFB0B5
        #ACCABE
        #E4BF4C
        #382F19
        #6CBF86
        #74687B
        #84B7AD
        #AFE5E3
        #040082
        #4B4BC2
        #D3F8CE
        #FB0739
        #709262
        #E0D6F8
        #C1CAE1
        #91A3CE
        #C6BCFC
        #798099
        #2B384F
        #02A487
        #8A8EFD
        #0D58AC
        #8E3620
        #3B483B
        #78B6C0
        #464300
        #BC80FD
        #E1A6A2
        #9C38B9
        #938360
        #171C01
        #337FFC
        #C07B8A
        #762F74
        #843F01
        #E08465
        #CC972B
        #C4B1D0
        #5CABD1
        #F96642
        #B5AD9E
        #455050
        #87FEA7
        #3E011B
        #F3FB6B
        #6D3935
        #243033
        #939260
        #2C4100
        #223E19
        #805F5B
        #498B5C
        #A4B7C4
        #5B4C9B
        #BDB27D
        #401B4C
        #56A781
        #B449B9
        #D7DE65
        #210A01
        #8861DD
        #FBCCA6
        #6B213F
        #8749D6
        #DC9CB5
        #95FE62
        #E1E0C7
        #C78CB7
        #002155
        #0D0828
        #467E3B
        #9B7BA1
        #877889
        #5F92F9
        #C7FE96
        #4B31B7
        #302317
        #8F712C
        #8F8B9F
        #A1B26F
        #DE8EF0
        #19413D
        #AE7B30
        #A39778
        #F8EDFA
        #66515D
        #642429
        #009D50
        #3F2C33
        #7D855A
        #C25703
        #F8C0FE
        #694578
        #FD2720
        #4A4E60
        #926E54
        #5C734D
        #7EA893
        #8CA2B6
        #A992F6
        #844851
        #CBC972
        #7E5E74
        #DBF8FE
        #2B2894
        #4F4736
        #098458
        #DE6F67
        #302D45
        #FEEAAB
        #F38C50
        #2E1218
        #9C2365
        #563E5B
        #0C87CD
        #002D1C
        #B13759
        #F6A690
        #3A637C
        #996CC9
        #7550FB
        #6CE4D7
        #CB6CB3
        #004D3B
        #558472
        #DC9458
        #946D6B
        #926777
        #DC4ACC
        #4B3632
        #B18666
        #C3A38A
        #BA77DA
        #935C86
        #FEC8D9
        #85AF6A
        #67FEFD
        #E0C08D
        #81897A
        #744C44
        #AAB5E1
        #BEB99C
        #D3BEC0
        #FC970D
        #E6CEB1
        #8E8287
        #A8C9D4
        #880090
        #6E5D5E
        #3D8DA7
        #62625C
        #83E2FD
        #E3AC43
        #A0998B
        #998836
        #8B3141
        #3A6E5C
        #E09DD6
        #021A14
        #515EB8
        #2C2D16
        #B5CD8F
        #696691
        #BF7739
        #B67459
        #DB354C
        #191B1B
        #8CA4A1
        #A7524C
        #E15000
        #D4BD03
        #7592C5
        #650A01
        #AC4FDC
        #D6E3E6
        #6BDA66
        #A14134
        #A296A2
        #58541B
        #A6ADA0
        #EACCEC
        #7A6148
        #201450
        #32182C
        #6D371B
        #9E1702
        #02E8B8
        #B3E3C0
        #5E7F2C
        #93AA49
        #B14D22
        #677075
        #DCDAE1
        #02D2C9
        #786E6A
        #9D9F03
        #662D82
        #01AC9E
        #097821
        #F1740F
        #CDE0FE
        #F3FED2
        #77761E
        #3F3E9A
        #0274A4
        #BDBBC9
        #6E5C05
        #BD6271
        #924BA0
        #263930
        #E8A17D
        #C38001
        #437879
        #79DBDF
        #FDBA6E
        #E72800
        #FCE1DA
        #46355D
        #DF7A8C
        #FD6CB0
        #1E021E
        #7C66A3
        #A24471
        #032ADF
        #9D4D5F
        #7A7D66
        #7755B1
        #E2DBD2
        #0649BA
        #30A203
        #574B6F
        #7CB309
        #1C1C2C
        #AC8F99
        #5A35DD
        #091018
        #5C9A91
        #855341
        #AF1732
        #6D9193
        #877941
        #75ECB0
        #958875
        #6C4F16
        #5C4737
        #FD109A
        #56481E
        #CAA375
        #005F2A
        #D2E49E
        #415B43
        #036D66
        #E0F4EB
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-07
          • 1970-01-01
          • 1970-01-01
          • 2013-05-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多