如何在C#中获得彩虹颜色渐变?
我想有一个基于彩虹颜色(红…黄…绿…蓝…)的颜色枚举 我认为基本上有两种方法可以做到这一点:如何在C#中获得彩虹颜色渐变?,c#,colors,gradient,C#,Colors,Gradient,我想有一个基于彩虹颜色(红…黄…绿…蓝…)的颜色枚举 我认为基本上有两种方法可以做到这一点: 创建包含一些重要参考颜色的查找表,并在这些颜色之间进行插值。我一点也不喜欢这个主意 应用一些或多或少的奇特数学。可能更少,但我不太明白它是如何工作的。有什么想法吗 (哦,虽然我做了一些这样的研究,但没有发现好的结果。如果这个问题已经发布了,请告诉我该位置,我会删除它。) 编辑:我更喜欢独立于使用的技术来显示渐变。例如,像GetRainbowColor(float f)这样的东西,f的范围从0(红色)到1
我做了一个快速检查,看看您是否至少可以以更独立的方式获得一些功能(例如获取点数组或其他)。情况似乎并非如此 这比你想象的要容易 首先,您需要hsv或hsl到rgb的转换功能 然后您只需迭代色调
h
的所有可能值,同时保持饱和度
s和亮度l
恒定
如果希望100种颜色的彩虹均匀分布:
for(double i = 0; i < 1; i+=0.01)
{
ColorRGB c = HSL2RGB(i, 0.5, 0.5);
//do something with the color
}
for(双i=0;i<1;i+=0.01)
{
颜色RGB c=HSL2RGB(i,0.5,0.5);
//对颜色做点什么
}
通过将所有这些颜色添加到列表中并返回相应的索引颜色,您也可以通过这种方式轻松创建所需的函数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);
}
}
下面是我喜欢使用的一个(输出为HTML RGB颜色):
允许您查找的内容,也可以作为NuGet软件包安装。
这不完全是彩虹渐变。
但它可以将渐变写入控制台,这也会混淆IDE和
Colorful.Console
及
因此,请确保定义正确的控制台。只需使用Rainbow.dll
。这可能不是最好的库,但我认为,为了在您想要的每个WinForm控件上实现平滑彩虹效果,这就是它
链接:
如何使用:
Yourcontrol.background=Color.FromArgb(Class1.A、Class1.R、Class1.G)代码>WPF?WinForms?ASP.NET?答案可能会因技术的不同而有所不同。另请参阅,其中有一节介绍如何将HSL转换为RGBNice和Compressive,我喜欢它的链接过期。请更新/替换它。
Colorful.Console
System.Console