随机生成美观的调色板的算法

时间:2020-03-05 18:47:25  来源:igfitidea点击:

我正在寻找一种简单的算法来生成大量随机的,美观的颜色。因此,没有疯狂的霓虹色,让人想起粪便的颜色等。

我已经找到解决此问题的方法,但是它们依赖于除RGB之外的其他调色板。
我宁愿只使用笔直的RGB,也不愿来回映射。这些其他解决方案最多也只能生成32种左右的令人愉悦的随机颜色。

任何想法都很棒。

解决方案

回答

我们可以让它们处于一定的亮度范围内。可以稍微控制"霓虹"颜色的数量。例如,如果"亮度"

brightness = sqrt(R^2+G^2+B^2)

在一定的上限之内,它会被洗掉,变成浅色。相反,如果它在某个下限之内,它将更暗。这样可以消除任何疯狂的,突出的颜色,如果我们选择的边界值过高或者过低,则它们都将非常接近白色或者黑色。

回答

人们长期以来一直在研究色彩理论,而他们甚至不知道所有规则,这将很难获得所需的算法。

但是,我们可以使用一些规则来剔除不良的颜色组合(即,有一些规则可以使颜色发生冲突并选择互补色)。

我建议我们访问图书馆的艺术版块,并阅读有关色彩理论的书籍,以更好地了解什么是好的色彩,然后再尝试使一种色彩看起来似乎我们甚至可能都不知道为什么某些组合有效而其他组合却无效。

-亚当

回答

我们可以将随机颜色的RGB值与恒定颜色的RGB值进行平均:

(以Java为例)

public Color generateRandomColor(Color mix) {
    Random random = new Random();
    int red = random.nextInt(256);
    int green = random.nextInt(256);
    int blue = random.nextInt(256);

    // mix the color
    if (mix != null) {
        red = (red + mix.getRed()) / 2;
        green = (green + mix.getGreen()) / 2;
        blue = (blue + mix.getBlue()) / 2;
    }

    Color color = new Color(red, green, blue);
    return color;
}

将随机颜色与白色(255、255、255)混合,可以通过增加亮度并同时保持原始颜色的色调来创建中性柔和色。这些随机生成的粉彩通常搭配得很好,尤其是数量很大时。

这是使用上述方法生成的一些柔和的颜色:

我们还可以将随机颜色与恒定的柔和色混合在一起,从而产生一组有色的中性色。例如,使用浅蓝色可创建以下颜色:

更进一步,我们可以在生成器中添加启发式算法,以考虑到互补色或者阴影级别,但是这完全取决于我们希望使用随机颜色获得的印象。

一些其他资源:

  • http://en.wikipedia.org/wiki/Color_theory
  • http://en.wikipedia.org/wiki/Complementary_color

回答

转换为另一个调色板是执行此操作的一种非常优越的方法。他们这样做是有原因的:其他调色板是"可感知的",也就是说,它们将相似的外观颜色放在一起,然后调整一个变量以可预测的方式更改颜色。对于RGB来说,这都不是正确的,RGB之间的"相处得很好"之间没有明显的关系。