aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDemizdor <avalorrian@gmail.com>2019-01-14 12:49:00 +0200
committerDemizdor <avalorrian@gmail.com>2019-01-14 12:49:00 +0200
commitda1714f411f3863b8fb0739e7282d5b9817dfde9 (patch)
tree122bc4b8d4cc8f6d690b3e1b2ac697fdf51ec844
parent49a69e3e2746fc8961097c8ef9cbedc6a0a66984 (diff)
downloadraylib-da1714f411f3863b8fb0739e7282d5b9817dfde9.tar.gz
raylib-da1714f411f3863b8fb0739e7282d5b9817dfde9.zip
Added ColorFromHSV()
-rw-r--r--src/core.c35
-rw-r--r--src/raylib.h1
2 files changed, 36 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)
{
diff --git a/src/raylib.h b/src/raylib.h
index 1ddfaeaa..ce24445a 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -891,6 +891,7 @@ RLAPI double GetTime(void); // Returns ela
RLAPI int ColorToInt(Color color); // Returns hexadecimal value for a Color
RLAPI Vector4 ColorNormalize(Color color); // Returns color normalized as float [0..1]
RLAPI Vector3 ColorToHSV(Color color); // Returns HSV values for a Color
+RLAPI Color ColorFromHSV(Vector3 hsv, unsigned char alpha); // Returns a Color from HSV values (NOTE: some precision is lost due to rounding errors)
RLAPI Color GetColor(int hexValue); // Returns a Color struct from hexadecimal value
RLAPI Color Fade(Color color, float alpha); // Color fade-in or fade-out, alpha goes from 0.0f to 1.0f