c# - 如何在 C# 中以编程方式创建柔和的颜色?

标签 c# .net algorithm colors

根据所需的颜色数量等距生成它们。如果指定的计数为 8,则看起来像这样:

List<Color> GeneratePastelColors (int count)

enter image description here

最佳答案

如果您使用 HSV 而不是 RGB,您会发现在这类问题中颜色更容易处理。

“等间距颜色”几乎总是意味着“等间距色调”。因此,对于色调中的 [0,360),您只需平分该范围即可等分空间。

现在您有了一个色调,您只需要找到该色调的“柔和”版本。对我来说,这意味着稍微降低颜色的饱和度。对于初学者,我会说 80% 饱和。

在我的测试中,我使用 100% 作为值(value)。然后只需转换为RGB。这是我一直在玩的东西:

<body>
<script>
// taken from http://ariya.blogspot.com/2008/07/converting-between-hsl-and-hsv.html
function hsv_to_hsl(s, v)
{
    var ss, ll;
    ll = (2. - s) * v;
    ss = 1. * s * v;
    ss /= (ll <= 1.) ? (ll) : 2. - ll;
    ll /= 2.;

    return [ss, ll];
}

function do_colors(sat, light)
{
    n = 15;
    document.write(n + " colors at " + sat + "% sat, " + light + "% lightness<br />");
    for(var x = 0; x < n; ++x)
    {
        hue = 360.0 / n * x;
        html_chunk = "<div style='width: 50px; height: 50px; display: inline-block; background: hsl(" + hue + ", " + sat + "%, " + light + "%);'>&nbsp;</div>";
        document.write(html_chunk);
    }
    document.write("<br />");
}

do_colors(100, 50);
do_colors(95, 75);
do_colors(75, 50);
do_colors(100, 35);

// rudimentary averages from your colors
sl = hsv_to_hsl(.7, .9);
s = sl[0] * 100;
l = sl[1] * 100;
do_colors(s, l);
do_colors(75, 60);
</script>
</body>

不是 C#,我知道,但只是想确定光线并坐下来。

否则,您可以查看样本颜色,查看 HSV/HSL 值是否存在任何相关性,并尝试从中推导出算法。如果绘制 S/H 和 V/H,您会看到图中灰色处有一个大的凹陷——这似乎是一个异常值。 (底行左起第三个。)忽略该值,S 约为 75%,而值略低于 90%。使用这些值可能会得到最好的结果。

链接:http://jsfiddle.net/ZHyAQ/

关于c# - 如何在 C# 中以编程方式创建柔和的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7816543/

相关文章:

c# - 处理 URL 和获取数据

c# - 如何在内部访问修饰符上实现Setter依赖注入(inject)

c# - ASP.NET FormsAuthentication - 要解密的数据长度无效

java - 斐波那契算法中的计数加法

algorithm - 最长递增子序列(O(nlogn))

c# - 如何使用 LINQ 查找 ResultPropertyCollection 中的任何值是否包含某个子字符串?

C# 将文件名作为 json 参数传递 - 获取错误 "Unrecognized escape sequence. "

c# - 为什么使用相同的 HtmlDecode() 函数会得到不同的结果?

.net - Linq to SQL 是否比 Linq to Entities 更快?

java - 层次结构的相似度算法