aboutsummaryrefslogtreecommitdiff
path: root/color-utils.c
diff options
context:
space:
mode:
authoriceyrazor <iceyrazor@mailfence.com>2026-07-21 03:37:29 -0500
committericeyrazor <iceyrazor@mailfence.com>2026-07-21 03:37:29 -0500
commiteffc9a1a4f4c6108ba14fe457ba1add547e86244 (patch)
tree8a7aa7cda08d80fb2d938620460b00414c967f4a /color-utils.c
Diffstat (limited to 'color-utils.c')
-rwxr-xr-xcolor-utils.c91
1 files changed, 91 insertions, 0 deletions
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 <math.h>
+
+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