小编典典

如何自动生成 N 个“不同”颜色?

all

我编写了以下两种方法来自动选择 N 种不同的颜色。它通过在 RGB
立方体上定义分段线性函数来工作。这样做的好处是,如果您想要的话,您也可以获得渐进式比例,但是当 N 变大时,颜色可能会开始看起来相似。我也可以想象将 RGB
立方体均匀地细分为格子,然后绘制点。有人知道其他方法吗?我排除了定义一个列表,然后只是循环浏览它。我还应该说,我通常不在乎它们是否发生冲突或看起来不好看,它们只需要在视觉上与众不同。

public static List<Color> pick(int num) {
    List<Color> colors = new ArrayList<Color>();
    if (num < 2)
        return colors;
    float dx = 1.0f / (float) (num - 1);
    for (int i = 0; i < num; i++) {
        colors.add(get(i * dx));
    }
    return colors;
}

public static Color get(float x) {
    float r = 0.0f;
    float g = 0.0f;
    float b = 1.0f;
    if (x >= 0.0f && x < 0.2f) {
        x = x / 0.2f;
        r = 0.0f;
        g = x;
        b = 1.0f;
    } else if (x >= 0.2f && x < 0.4f) {
        x = (x - 0.2f) / 0.2f;
        r = 0.0f;
        g = 1.0f;
        b = 1.0f - x;
    } else if (x >= 0.4f && x < 0.6f) {
        x = (x - 0.4f) / 0.2f;
        r = x;
        g = 1.0f;
        b = 0.0f;
    } else if (x >= 0.6f && x < 0.8f) {
        x = (x - 0.6f) / 0.2f;
        r = 1.0f;
        g = 1.0f - x;
        b = 0.0f;
    } else if (x >= 0.8f && x <= 1.0f) {
        x = (x - 0.8f) / 0.2f;
        r = 1.0f;
        g = 0.0f;
        b = x;
    }
    return new Color(r, g, b);
}

阅读 86

收藏
2022-06-07

共1个答案

小编典典

您可以使用HSL 颜色模型来创建颜色。

如果您想要的只是不同的色调(可能),以及亮度或饱和度的轻微变化,您可以像这样分配色调:

// assumes hue [0, 360), saturation [0, 100), lightness [0, 100)

for(i = 0; i < 360; i += 360 / num_colors) {
    HSLColor c;
    c.hue = i;
    c.saturation = 90 + randf() * 10;
    c.lightness = 50 + randf() * 10;

    addColor(c);
}
2022-06-07