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 | ||
