Beispiel #1
0
 public static Color AHSVtoColor(AHSV ahsv)
 {
     ARGB ARGB = AHSVtoARGB(ahsv);
       return Color.FromArgb(ARGB.Alpha, ARGB.Red, ARGB.Green, ARGB.Blue);
 }
Beispiel #2
0
        public static ARGB AHSVtoARGB(AHSV AHSV)
        {
            // HSV contains values scaled as in the color wheel:
              // that is, all from 0 to 255.

              // for ( this code to work, HSV.Hue needs
              // to be scaled from 0 to 360 (it//s the angle of the selected
              // point within the circle). HSV.Saturation and HSV.value must be
              // scaled to be between 0 and 1.

              double h;
              double s;
              double v;

              double r = 0;
              double g = 0;
              double b = 0;

              // Scale Hue to be between 0 and 360. Saturation
              // and value scale to be between 0 and 1.
              h = ((double)AHSV.Hue / 255 * 360) % 360;
              s = (double)AHSV.Saturation / 255;
              v = (double)AHSV.Value / 255;

              if (s == 0)
              {
            // If s is 0, all colors are the same.
            // This is some flavor of gray.
            r = v;
            g = v;
            b = v;
              }
              else
              {
            double p;
            double q;
            double t;

            double fractionalSector;
            int sectorNumber;
            double sectorPos;

            // The color wheel consists of 6 sectors.
            // Figure out which sector you//re in.
            sectorPos = h / 60;
            sectorNumber = (int)(Math.Floor(sectorPos));

            // get the fractional part of the sector.
            // That is, how many degrees into the sector
            // are you?
            fractionalSector = sectorPos - sectorNumber;

            // Calculate values for the three axes
            // of the color.
            p = v * (1 - s);
            q = v * (1 - (s * fractionalSector));
            t = v * (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:
            r = v;
            g = t;
            b = p;
            break;

              case 1:
            r = q;
            g = v;
            b = p;
            break;

              case 2:
            r = p;
            g = v;
            b = t;
            break;

              case 3:
            r = p;
            g = q;
            b = v;
            break;

              case 4:
            r = t;
            g = p;
            b = v;
            break;

              case 5:
            r = v;
            g = p;
            b = q;
            break;
            }
              }
              // return an RGB structure, with values scaled
              // to be between 0 and 255.
              return new ARGB(AHSV.Alpha, (int)(r * 255), (int)(g * 255), (int)(b * 255));
        }