Search code examples
c#colorsgradient

How do I get a rainbow color gradient in C#?


I'd like to have an enumeration of Colors based on the rainbow colors (red... yellow... green... blue...).

I see basically two ways to do that:

  1. Create a lookup table containing some important reference colors and interpolate between these. I don't like this idea at all.

  2. Apply some more or less fancy math. Probably less, but I don't quite see how it works. Any ideas?

(Oh, and while I did some SO research, I found no good results. If this question was already posted, please just point me to the location and I'll delete this.)

Edit: I'd prefer to have this independent of the used technology to display the gradient. For instance, something like GetRainbowColor (float f) with f ranging from 0 (red) to 1 (violet) would work great.


Solution

  • This is easier than you think.

    First you need an hsv or hsl to rgb conversion function. Here is C# code to do that conversion.

    Then you simply iterate over all of the possible values of the hue h while keeping the saturation s and luminosity l constant.

    If you want 100 colors of the rainbow spaced out equally:

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

    You could also easily create your desired function GetRainbowColor this way by adding all of these colors to a List<ColorRGB> and returning the appropriate indexed color.