diff options
Diffstat (limited to 'keyboards/handwired/practice60/hsv2rgb.c')
-rw-r--r-- | keyboards/handwired/practice60/hsv2rgb.c | 80 |
1 files changed, 0 insertions, 80 deletions
diff --git a/keyboards/handwired/practice60/hsv2rgb.c b/keyboards/handwired/practice60/hsv2rgb.c deleted file mode 100644 index adb7af8fa..000000000 --- a/keyboards/handwired/practice60/hsv2rgb.c +++ /dev/null | |||
@@ -1,80 +0,0 @@ | |||
1 | /* hsv2rgb.c | ||
2 | * Integer only conversion functions between HSV and RGB | ||
3 | */ | ||
4 | |||
5 | #include "hsv2rgb.h" | ||
6 | |||
7 | // TODO fix these buggy macros | ||
8 | #define max(x,y) ((x>y) ? x:y) | ||
9 | #define min(x,y) ((x>y) ? y:x) | ||
10 | #define min3(x,y,z) (min(min(x,y),z)) | ||
11 | #define max3(x,y,z) (max(max(x,y),z)) | ||
12 | |||
13 | |||
14 | rgb_color hsv2rgb(hsv_color hsv) | ||
15 | { | ||
16 | // From : http://qscribble.blogspot.fr/2008/06/integer-conversion-from-hsl-to-rgb.html | ||
17 | int h = hsv.h; | ||
18 | int s = hsv.s; | ||
19 | int v = hsv.v; | ||
20 | rgb_color rgb = {0, 0, 0}; | ||
21 | |||
22 | if (v == 0) | ||
23 | return rgb; | ||
24 | |||
25 | // sextant = 0 .. 5 | ||
26 | int sextant = (h*6)/256; | ||
27 | // f = 0 .. 42 | ||
28 | int f = h - (sextant*256)/6; | ||
29 | |||
30 | int p = (v * (256 - s))/256; | ||
31 | int q = (v * (256*43 - s*f))/(256*43); | ||
32 | int t = (v * (256*43 - s*(43-f)))/(256*43); | ||
33 | |||
34 | // Corrige les erreurs dues aux arrondis | ||
35 | p = max(min(p, 255), 0); | ||
36 | q = max(min(q, 255), 0); | ||
37 | t = max(min(t, 255), 0); | ||
38 | |||
39 | switch(sextant){ | ||
40 | case 0: rgb.r = v; rgb.g = t; rgb.b = p; break; | ||
41 | case 1: rgb.r = q; rgb.g = v; rgb.b = p; break; | ||
42 | case 2: rgb.r = p; rgb.g = v; rgb.b = t; break; | ||
43 | case 3: rgb.r = p; rgb.g = q; rgb.b = v; break; | ||
44 | case 4: rgb.r = t; rgb.g = p; rgb.b = v; break; | ||
45 | default:rgb.r = v; rgb.g = p; rgb.b = q; break; | ||
46 | } | ||
47 | return rgb; | ||
48 | } | ||
49 | |||
50 | |||
51 | hsv_color rgb2hsv(rgb_color rgb) | ||
52 | { | ||
53 | // From : http://www.ruinelli.ch/rgb-to-hsv | ||
54 | hsv_color hsv = {0, 0, 0}; | ||
55 | int min, max, delta; | ||
56 | |||
57 | min = min3(rgb.r, rgb.g, rgb.b); | ||
58 | max = max3(rgb.r, rgb.g, rgb.b); | ||
59 | |||
60 | if(max==0) { | ||
61 | hsv.h = 0; | ||
62 | hsv.s = 0; | ||
63 | hsv.v = 0; | ||
64 | return hsv; | ||
65 | } | ||
66 | |||
67 | hsv.v = max; | ||
68 | delta = max - min; | ||
69 | |||
70 | hsv.s = (delta)*255 / max; | ||
71 | |||
72 | if(rgb.r == max) | ||
73 | hsv.h = (rgb.g - rgb.b)*42/delta; // between yellow & magenta | ||
74 | else if(rgb.g == max) | ||
75 | hsv.h = 120 + (rgb.b - rgb.r)*42/delta; // between cyan & yellow | ||
76 | else | ||
77 | hsv.h = 240 + (rgb.r - rgb.g)*42/delta; // between magenta & cyan | ||
78 | |||
79 | return hsv; | ||
80 | } \ No newline at end of file | ||