summaryrefslogtreecommitdiffhomepage
path: root/src/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core.c')
-rw-r--r--src/core.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/core.c b/src/core.c
index 9b6a7ce0..94a2373e 100644
--- a/src/core.c
+++ b/src/core.c
@@ -1445,6 +1445,41 @@ Vector3 ColorToHSV(Color color)
return hsv;
}
+// Returns a Color from HSV values
+// NOTE: Color->HSV->Color conversion will not yield exactly the same color due to rounding errors
+Color ColorFromHSV(Vector3 hsv, unsigned char alpha)
+{
+ // implementation details at https://en.wikipedia.org/wiki/HSL_and_HSV#Alternative_HSV_conversion
+ float h = hsv.x, s=hsv.y, v=hsv.z;
+ Color color = {0,0,0,alpha};
+
+ //red
+ float k = fmod((5.+h/60.),6);
+ float t = 4.-k;
+ k = t<k?t:k;
+ k = k<1?k:1;
+ k = k>0?k:0;
+ color.r = (v-v*s*k)*255;
+
+ //green
+ k = fmod((3.+h/60.),6);
+ t = 4.-k;
+ k = t<k?t:k;
+ k = k<1?k:1;
+ k = k>0?k:0;
+ color.g =(v-v*s*k)*255;
+
+ //blue
+ k = fmod((1.+h/60.),6);
+ t = 4.-k;
+ k = t<k?t:k;
+ k = k<1?k:1;
+ k = k>0?k:0;
+ color.b = (v-v*s*k)*255;
+
+ return color;
+}
+
// Returns a Color struct from hexadecimal value
Color GetColor(int hexValue)
{