生成独特颜色的算法

Bri*_*ell 26 language-agnostic algorithm colors

我正在寻找一种能够生成一系列颜色的算法,以便颜色尽可能广泛地分布(因此它们不会轻易混淆).

我有一系列具有从1开始计数的ID的对象.我想用不同的,美学上令人愉悦的颜色来表示每个对象,这些颜色不容易与其邻居混淆.颜色不一定是随机的.我想每次输入相同的ID时都会得到相同的颜色.

Tat*_*ize 24

我已经检查了所有这些方法,解决了很多方法.最后用CIEde2000蛮力,真的,你最好的选择只是一个静态列表.无论你做什么,你都不能获得超过30种颜色,并且具有良好的清晰度.色盲的因素和混乱的线条,你真的在​​做一些阻碍.使用查找表并使用除颜色之外的其他一些特征修改数据点.

最大差异调色板

#000000
#00FF00
#0000FF
#FF0000
#01FFFE
#FFA6FE
#FFDB66
#006401
#010067
#95003A
#007DB5
#FF00F6
#FFEEE8
#774D00
#90FB92
#0076FF
#D5FF00
#FF937E
#6A826C
#FF029D
#FE8900
#7A4782
#7E2DD2
#85A900
#FF0056
#A42400
#00AE7E
#683D3B
#BDC6FF
#263400
#BDD393
#00B917
#9E008E
#001544
#C28C9F
#FF74A3
#01D0FF
#004754
#E56FFE
#788231
#0E4CA1
#91D0CB
#BE9970
#968AE8
#BB8800
#43002C
#DEFF74
#00FFC6
#FFE502
#620E00
#008F9C
#98FF52
#7544B1
#B500FF
#00FF78
#FF6E41
#005F39
#6B6882
#5FAD4E
#A75740
#A5FFD2
#FFB167
#009BFF
#E85EBE
Run Code Online (Sandbox Code Playgroud)


Pat*_*ney 20

您可以将id乘以黄金比率(phi)得到数字0 <= n <1.您生成的所有数字将趋于均匀分布.

PHI = (1 + sqrt(5))/2
n = id * PHI - floor(id * PHI) 
Run Code Online (Sandbox Code Playgroud)

那么这是将该数字转换为颜色的问题,例如

hue = floor(n * 256)
Run Code Online (Sandbox Code Playgroud)

  • http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ (8认同)

Nor*_*sey 10

图形设计人员知道,如果在信息显示中要将许多颜色彼此靠近使用,则颜色空间中的颜色应该相对接近.饱和度或色调的微小变化通常比大跳跃更好 - 当涉及许多颜色时,人眼实际上发现当颜色距离不是很大时更容易吸收信息.

此外,不要忘记您的一些用户将是色盲.由于色盲的种类繁多,很难知道要避免哪种组合.也许其他人可以解决这个问题?


mar*_*nus 10

我写了一篇关于同一主题的文章:

如何以编程方式生成随机颜色

基本上你可以使用HSV颜色空间,设置固定的饱和度和值,并修改Hue.当您知道所需的颜色数量时,只需将Hue的范围分开即可[0,1[.如果您不知道所需颜色的数量,您仍然可以使用黄金比例从该空间中选择颜色.

  • 我使用JavaScript实现了您的算法:http://jsfiddle.net/hCtc3/2/ (2认同)

Rya*_*ner 8

可能元素的数量是否具有合理的下限?一种快速简便的解决方案是使用项目的ID存储一系列颜色值.这假设您的颜色数量相对较少,而且您确定不会超过一定数量的项目.

如果你想生成颜色而不是使用列表,那么使它们具有一致和正常外观的一个技巧就是使用HSB生成它们.预先定义亮度和饱和度,然后将色调值基于ID的某个函数(这可能是各种各样的事情,具体取决于您计划拥有多少ID,但将ID乘以某个量(并且当它超过时进行修改) 255!)是一个很好的粗略方法.使用这种方法,颜色将在饱和度和亮度方面全部"对齐",但它们每个都具有不同的颜色.

我在工作上有点无聊,所以我掀起了一个快速的解决方案:

class HsbColor
{
    public int Hue { get; set; }
    public int Saturation { get; set; }
    public int Brightness { get; set; }

    public Color ToRGB
    {
        // left as exercise to the reader...
    }
}

public class Item
{


    public int Id { get; set; }
    private static const byte EXPECTED_MAX = 15;
    private static int HUE_FACTOR = 255 / EXPECTED_MAX;

    public HsbColor Color 
    {
       get {

         var color = new HsbColor() { Saturation = 175, Brightness = 175 };

         color.Hue = (Id * HUE_FACTOR) % 255;

         return color;
       }
    }
}
Run Code Online (Sandbox Code Playgroud)