Move slurping of files into its own function.
[movit] / util.cpp
1 #include <math.h>
2
3 #include "util.h"
4
5 void hsv2rgb(float h, float s, float v, float *r, float *g, float *b)
6 {
7         if (h < 0.0f) {
8                 h += 2.0f * M_PI;
9         }
10         float c = v * s;
11         float hp = (h * 180.0 / M_PI) / 60.0;
12         float x = c * (1 - fabs(fmod(hp, 2.0f) - 1.0f));
13
14         if (hp >= 0 && hp < 1) {
15                 *r = c;
16                 *g = x;
17                 *b = 0.0f;
18         } else if (hp >= 1 && hp < 2) {
19                 *r = x;
20                 *g = c;
21                 *b = 0.0f;
22         } else if (hp >= 2 && hp < 3) {
23                 *r = 0.0f;
24                 *g = c;
25                 *b = x;
26         } else if (hp >= 3 && hp < 4) {
27                 *r = 0.0f;
28                 *g = x;
29                 *b = c;
30         } else if (hp >= 4 && hp < 5) {
31                 *r = x;
32                 *g = 0.0f;
33                 *b = c;
34         } else {
35                 *r = c;
36                 *g = 0.0f;
37                 *b = x;
38         }
39
40         float m = v - c;
41         *r += m;
42         *g += m;
43         *b += m;
44 }
45
46 std::string read_file(const std::string &filename)
47 {
48         static char buf[131072];
49         FILE *fp = fopen(filename.c_str(), "r");
50         if (fp == NULL) {
51                 perror(filename.c_str());
52                 exit(1);
53         }
54
55         int len = fread(buf, 1, sizeof(buf), fp);
56         fclose(fp);
57
58         return std::string(buf, len);
59 }