#include "trop.h" #include "hsvutil.h" void OLDRGB2HSV(double r, double g, double b, double *h, double *s, double *v) { double max, min; double delta; max = std::max({r, g, b}); min = std::min({r, g, b}); *v = max; if (max != 0) *s = (max - min) / max; else *s = 0; if (*s == 0) *h = 0; else { delta = max - min; if (r == max) *h = (g - b) / delta; else if (g == max) *h = 2 + (b - r) / delta; else if (b == max) *h = 4 + (r - g) / delta; *h = *h * 60; if (*h < 0) *h += 360; } } void OLDHSV2RGB(double hue, double sat, double value, double *red, double *green, double *blue) { int i; double p, q, t, f; // if (hue > 360 || hue < 0) // hue=0; if (hue > 360) hue -= ((int)hue / 360) * 360; // hue-=360; if (hue < 0) hue += (1 - (int)hue / 360) * 360; // hue+=360; if (sat < 0) sat = 0; if (sat > 1) sat = 1; if (value < 0) value = 0; if (value > 1) value = 1; if (sat == 0) { *red = value; *green = value; *blue = value; } else { if (hue == 360) hue = 0; hue = hue / 60; i = (int)hue; f = hue - i; p = value * (1 - sat); q = value * (1 - (sat * f)); t = value * (1 - (sat * (1 - f))); switch (i) { case 0: *red = value; *green = t; *blue = p; break; case 1: *red = q; *green = value; *blue = p; break; case 2: *red = p; *green = value; *blue = t; break; case 3: *red = p; *green = q; *blue = value; break; case 4: *red = t; *green = p; *blue = value; break; case 5: *red = value; *green = p; *blue = q; break; } } }