首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >随机生成美观调色板的算法

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

Stack Overflow用户
提问于 2008-09-04 01:54:12
回答 16查看 143.1K关注 0票数 320

我正在寻找一个简单的算法来生成大量的随机,美观的颜色。所以没有疯狂的霓虹灯颜色,让人联想到粪便的颜色,等等。

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

任何想法都是很棒的。

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2008-09-04 06:00:40

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

(Java中的示例)

代码语言:javascript
运行
复制
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)混合,可通过在保持原始颜色色调的同时增加亮度来创建中性粉彩。这些随机生成的粉笔通常很好地搭配在一起,特别是大量的粉笔。

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

您还可以将随机颜色与恒定的粉彩混合,这会产生一组有色的中性颜色。例如,使用浅蓝色可创建如下颜色:

更进一步,你可以在生成器中添加启发式算法,考虑到补色或阴影级别,但这完全取决于你想要用随机颜色实现的印象。

一些额外的资源:

票数 442
EN

Stack Overflow用户

发布于 2011-02-16 03:01:05

我会使用色轮,并给出一个随机的位置,你可以添加黄金角度(137度)

http://en.wikipedia.org/wiki/Golden_angle

以便每次都能得到不重叠的不同颜色。

调整色轮的亮度,你也可以得到不同的亮/暗颜色组合。

我找到了这篇博客文章,它很好地解释了这个问题,并使用黄金比例解决了这个问题。

http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/

更新:我刚刚找到了另一种方法:

它被称为RYB(红,黄,蓝)方法,本文对其进行了描述:

http://threekings.tk/mirror/ryb_TR.pdf

作为“绘画灵感色彩合成”。

该算法生成颜色,并选择每种新颜色以最大化其与先前选择的颜色的欧几里得距离。

你可以在这里找到一个很好的javascript实现:

http://afriggeri.github.com/RYB/

更新2:

科学博梅代尔刚刚发布了一个名为“我想要色调”的工具,它可以为数据科学家生成调色板。使用不同的颜色空间,使用k均值聚类或力矢量(排斥图)生成调色板,这些方法的结果非常好,它们在其网页中显示了理论和实现。

http://tools.medialab.sciences-po.fr/iwanthue/index.php

票数 89
EN

Stack Overflow用户

发布于 2012-09-04 23:05:24

在javascript中:

代码语言:javascript
运行
复制
function pastelColors(){
    var r = (Math.round(Math.random()* 127) + 127).toString(16);
    var g = (Math.round(Math.random()* 127) + 127).toString(16);
    var b = (Math.round(Math.random()* 127) + 127).toString(16);
    return '#' + r + g + b;
}

我在这里看到了这个想法:http://blog.functionalfun.net/2008/07/random-pastel-colour-generator.html

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档