Java如何自动生成N种“独特”颜色?

我在下面编写了两种方法来自动选择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);

}

回答:

你可以使用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);

}

以上是 Java如何自动生成N种“独特”颜色? 的全部内容, 来源链接: utcz.com/qa/433867.html

回到顶部