}
}
-/* Converts from RGB to HSV */
-static void
-rgb_to_hsv (gdouble *r,
- gdouble *g,
- gdouble *b)
-{
- gdouble red, green, blue;
- gdouble h, s, v;
- gdouble min, max;
- gdouble delta;
-
- red = *r;
- green = *g;
- blue = *b;
-
- h = 0.0;
-
- if (red > green)
- {
- if (red > blue)
- max = red;
- else
- max = blue;
-
- if (green < blue)
- min = green;
- else
- min = blue;
- }
- else
- {
- if (green > blue)
- max = green;
- else
- max = blue;
-
- if (red < blue)
- min = red;
- else
- min = blue;
- }
-
- v = max;
-
- if (max != 0.0)
- s = (max - min) / max;
- else
- s = 0.0;
-
- if (s == 0.0)
- h = 0.0;
- else
- {
- delta = max - min;
-
- if (red == max)
- h = (green - blue) / delta;
- else if (green == max)
- h = 2 + (blue - red) / delta;
- else if (blue == max)
- h = 4 + (red - green) / delta;
-
- h /= 6.0;
-
- if (h < 0.0)
- h += 1.0;
- else if (h > 1.0)
- h -= 1.0;
- }
-
- *r = h;
- *g = s;
- *b = v;
-}
-
/* Computes the vertices of the saturation/value triangle */
static void
compute_triangle (GtkHSV *hsv,