如何在C#中获得彩虹色渐变?

我想根据彩虹颜色(红色……黄色……绿色……蓝色……)列出颜色。

我基本上看到两种方法:

  1. 创建一个包含一些重要参考颜色的查找表,并在它们之间进行插值。 我完全不喜欢这个想法。

  2. 应用一些或多或少花哨的数学。 可能更少,但我不太明白它是如何工作的。 有任何想法吗?

(哦,当我做了一些SO研究时,我发现没有好结果。如果这个问题已经发布,请指出我的位置,我会删除它。)

编辑:我更喜欢这个独立于使用的技术来显示渐变。 例如,类似GetRainbowColor(float f)的f(范围从0(红色)到1(紫色))会很有效。

这比你想象的要容易。

首先,您需要一个hsv或hsl到rgb的转换函数。 这是进行转换的C#代码 。

然后,您只需迭代色调h所有可能值,同时保持saturation和亮度l不变。

如果你想要100种颜色的彩虹间隔均匀:

 for(double i = 0; i < 1; i+=0.01) { ColorRGB c = HSL2RGB(i, 0.5, 0.5); //do something with the color } 

您还可以通过将所有这些颜色添加到List并返回适当的索引颜色,轻松地GetRainbowColor这种方式创建所需的函数GetRainbowColor

我喜欢用这个:

 public static Color Rainbow(float progress) { float div = (Math.Abs(progress % 1) * 6); int ascending = (int) ((div % 1) * 255); int descending = 255 - ascending; switch ((int) div) { case 0: return Color.FromArgb(255, 255, ascending, 0); case 1: return Color.FromArgb(255, descending, 255, 0); case 2: return Color.FromArgb(255, 0, 255, ascending); case 3: return Color.FromArgb(255, 0, descending, 255); case 4: return Color.FromArgb(255, ascending, 0, 255); default: // case 5: return Color.FromArgb(255, 255, 0, descending); } } 

在winforms(或使用GDI +的任何东西)中,您可以使用System.Drawing.Drawing2D.LinearGradientBrush为您进行插值。

WPF的System.Windows.Media.GradientBrush也可以正常工作。 这是抽象的,所以你最终可能会得到WPF的LinearGradientBrush。 它与另一个名称空间不同。

编辑:由于编辑的问题表明你想要独立于科技我不认为这个答案适用。 我现在要把它留在这里以防万一有人在C#中寻找Gradients,但如果有人发现这令人反感,我会删除答案。

我做了一个快速检查,看看你是否能够以更独立的方式获得某些function(例如获取Point数组或其他东西)。 似乎并非如此。

这是我喜欢使用的(输出是HTML RGB颜色):

 public static String Rainbow(Int32 numOfSteps, Int32 step) { var r = 0.0; var g = 0.0; var b = 0.0; var h = (Double)step / numOfSteps; var i = (Int32)(h * 6); var f = h * 6.0 - i; var q = 1 - f; switch (i % 6) { case 0: r = 1; g = f; b = 0; break; case 1: r = q; g = 1; b = 0; break; case 2: r = 0; g = 1; b = f; break; case 3: r = 0; g = q; b = 1; break; case 4: r = f; g = 0; b = 1; break; case 5: r = 1; g = 0; b = q; break; } return "#" + ((Int32)(r * 255)).ToString("X2") + ((Int32)(g * 255)).ToString("X2") + ((Int32)(b * 255)).ToString("X2"); } 

从这里开始: http : //www.midnightkite.com/color.html

你可以解释一下: http : //www.physics.sfasu.edu/astro/color/spectra.html它是FORTRAN,但它的作用非常明显。

此外,您可以在此深入阅读: http : //en.wikipedia.org/wiki/CIE_1931_color_space

这是Python中的一个版本: http : //www.johnny-lin.com/py_code/wavelen2rgb.py

BTW,C#的第一个谷歌热门是: http : //miguelmoreno.net/sandbox/wavelengthtoRGB/default.aspx

http://colorfulconsole.com/允许你正在寻找的东西,也可以作为NuGet包安装。 它不完全是彩虹渐变。 但它可以将渐变写入控制台,这也会使IDE混淆

 Colorful.Console 

 System.Console 

因此,请确保定义正确的控制台。