Skip to content

Instantly share code, notes, and snippets.

@juan-cardelino
Created September 17, 2013 14:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save juan-cardelino/6595339 to your computer and use it in GitHub Desktop.
Save juan-cardelino/6595339 to your computer and use it in GitHub Desktop.
void rgb_to_hsv_doubles(double *out, double *in)
34 {
35 assert_rgb(in);
36 double r, g, b, h, s, v, M, m;
37 r = in[0]; g = in[1]; b = in[2];
38
39 //printf("rgb %g,%g,%g...\n", r, g, b);
40
41 if (g >= r && g >= b) {
42 M = g;
43 m = BAD_MIN(r, b);
44 h = M == m ? 0 : 60*(b-r)/(M-m)+120;
45 }
46 else if (b >= g && b >= r) {
47 M = b;
48 m = BAD_MIN(r, b);
49 h = M == m ? 0 : 60*(r-g)/(M-m)+240;
50 }
51 else {
52 assert(r >= g && r >= b);
53 M = r;
54 if (g >= b) {
55 m = b;
56 h = M == m ? 0 : 60*(g-b)/(M-m)+0;
57 } else {
58 m = g;
59 h = M == m ? 0 : 60*(g-b)/(M-m)+360;
60 }
61 }
62
63 s = M == 0 ? 0 : (M - m)/M;
64 v = M;
65 h = fmod(h, 360);
66
67 //printf("\thsv %g,%g,%g\n", h, s, v);
68 out[0] = h; out[1] = s; out[2] = v;
69 assert_hsv(out);
70 }
71
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment