我写了下面的两个方法来自动选择 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);
}
原文由 job 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用 HSL 颜色模型 来创建您的颜色。
如果你想要的只是不同的色调(可能),以及亮度或饱和度的轻微变化,你可以像这样分配色调: