From effc9a1a4f4c6108ba14fe457ba1add547e86244 Mon Sep 17 00:00:00 2001 From: iceyrazor Date: Tue, 21 Jul 2026 03:37:29 -0500 Subject: init --- color-utils.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100755 color-utils.c (limited to 'color-utils.c') diff --git a/color-utils.c b/color-utils.c new file mode 100755 index 0000000..d01da3a --- /dev/null +++ b/color-utils.c @@ -0,0 +1,91 @@ +#ifndef color_utils_c +#define color_utils_c +#include + +struct RGB +{ + unsigned char R; + unsigned char G; + unsigned char B; +}; +struct HSV +{ + double H; + double S; + double V; +}; +struct RGB HSVToRGB(struct HSV hsv) { + double r = 0, g = 0, b = 0; + + if (hsv.S == 0) + { + r = hsv.V; + g = hsv.V; + b = hsv.V; + } + else + { + int i; + double f, p, q, t; + + if (hsv.H == 360) + hsv.H = 0; + else + hsv.H = hsv.H / 60; + + i = (int)trunc(hsv.H); + f = hsv.H - i; + + p = hsv.V * (1.0 - hsv.S); + q = hsv.V * (1.0 - (hsv.S * f)); + t = hsv.V * (1.0 - (hsv.S * (1.0 - f))); + + switch (i) + { + case 0: + r = hsv.V; + g = t; + b = p; + break; + + case 1: + r = q; + g = hsv.V; + b = p; + break; + + case 2: + r = p; + g = hsv.V; + b = t; + break; + + case 3: + r = p; + g = q; + b = hsv.V; + break; + + case 4: + r = t; + g = p; + b = hsv.V; + break; + + default: + r = hsv.V; + g = p; + b = q; + break; + } + + } + + struct RGB rgb; + rgb.R = r * 255; + rgb.G = g * 255; + rgb.B = b * 255; + + return rgb; +} +#endif -- cgit v1.3