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

如何在C#中获得彩虹颜色渐变?,c#,colors,gradient,C#,Colors,Gradient,我想有一个基于彩虹颜色(红…黄…绿…蓝…)的颜色枚举 我认为基本上有两种方法可以做到这一点: 创建包含一些重要参考颜色的查找表,并在这些颜色之间进行插值。我一点也不喜欢这个主意 应用一些或多或少的奇特数学。可能更少,但我不太明白它是如何工作的。有什么想法吗 (哦,虽然我做了一些这样的研究,但没有发现好的结果。如果这个问题已经发布了,请告诉我该位置,我会删除它。) 编辑:我更喜欢独立于使用的技术来显示渐变。例如,像GetRainbowColor(float f)这样的东西,f的范围从0(红色)到1

我想有一个基于彩虹颜色(红…黄…绿…蓝…)的颜色枚举

我认为基本上有两种方法可以做到这一点:

  • 创建包含一些重要参考颜色的查找表,并在这些颜色之间进行插值。我一点也不喜欢这个主意

  • 应用一些或多或少的奇特数学。可能更少,但我不太明白它是如何工作的。有什么想法吗

  • (哦,虽然我做了一些这样的研究,但没有发现好的结果。如果这个问题已经发布了,请告诉我该位置,我会删除它。)

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

    从这里开始:

    你可以解释这一点:它是FORTRAN,但它的功能非常明显

    此外,您还可以在此处更深入地阅读:

    以下是Python的一个版本:

    顺便说一句,C#在谷歌上的第一个成功例子是:

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

    WPF的System.Windows.Media.GradientBrush也可以工作。它是抽象的,因此您可能最终使用WPF的LinearGradientBrush。它位于与另一个不同的命名空间中

    编辑:因为这个问题被编辑是为了表明你想成为独立于技术的人,我认为这个答案不适用。我现在就把它放在这里,以防有人在寻找C#中的梯度,但如果有人觉得这不合适,我会删除答案


    我做了一个快速检查,看看您是否至少可以以更独立的方式获得一些功能(例如获取点数组或其他)。情况似乎并非如此

    这比你想象的要容易

    首先,您需要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