/// <summary>
        /// Converts <see cref="HSBColour"/> to <see cref="RgbColor"/>.
        /// </summary>
        /// <param name="hsb">The <see cref="HSBColour"/>.</param>
        /// <returns>A <see cref="RgbColor"/> equivalent.</returns>
        public static RGBColour HSBToRGB(HSBColour hsb)
        {
            double red = 0, green = 0, blue = 0;

            double h = hsb.Hue;
            double s = ((double)hsb.Saturation) / 100;
            double b = ((double)hsb.Brightness) / 100;

            if (s == 0)
            {
                red   = b;
                green = b;
                blue  = b;
            }
            else
            {
                // the color wheel has six sectors.

                double sectorPosition   = h / 60;
                var    sectorNumber     = (int)Math.Floor(sectorPosition);
                double fractionalSector = sectorPosition - sectorNumber;

                double p = b * (1 - s);
                double q = b * (1 - (s * fractionalSector));
                double t = b * (1 - (s * (1 - fractionalSector)));

                // Assign the fractional colors to r, g, and b
                // based on the sector the angle is in.
                switch (sectorNumber)
                {
                case 0:
                    red   = b;
                    green = t;
                    blue  = p;
                    break;

                case 1:
                    red   = q;
                    green = b;
                    blue  = p;
                    break;

                case 2:
                    red   = p;
                    green = b;
                    blue  = t;
                    break;

                case 3:
                    red   = p;
                    green = q;
                    blue  = b;
                    break;

                case 4:
                    red   = t;
                    green = p;
                    blue  = b;
                    break;

                case 5:
                    red   = b;
                    green = p;
                    blue  = q;
                    break;
                }
            }

            var nRed   = (int)Math.Round(red * 255);
            var nGreen = (int)Math.Round(green * 255);
            var nBlue  = (int)Math.Round(blue * 255);

            return(new RGBColour(nRed, nGreen, nBlue));
        }
示例#2
0
 /// <summary>
 /// Creates from a given color.
 /// </summary>
 /// <param name="colour">The color.</param>
 /// <returns></returns>
 public static HSBColour FromHSBColour(HSBColour colour)
 {
     return(new HSBColour(colour.Hue, colour.Saturation, colour.Brightness));
 }
示例#3
0
 /// <summary>
 /// Creates from a given color.
 /// </summary>
 /// <param name="colour">The color.</param>
 /// <returns></returns>
 public static HSLColour FromHSBColour(HSBColour colour)
 {
     return(FromRGBColour(colour.ToRGBColour()));
 }
 /// <summary>
 /// Creates from a given color.
 /// </summary>
 /// <param name="colour">The color.</param>
 /// <returns></returns>
 public static RGBColour FromHSBColour(HSBColour colour)
 {
     return(colour.ToRGBColour());
 }