aboutsummaryrefslogtreecommitdiff
path: root/kernel/hsv.c
blob: 8ba832333c70b4bfdd6e5e25619d3abea3471113 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/* $Id$ */
/* public domain */

#include <stdint.h>

void
hsv(uint8_t *r, uint8_t *g, uint8_t *b, uint16_t h, uint8_t s, uint8_t v)
{
	uint8_t i, f, p, q, t;

	i = h / 60;
	f = h % 60;
        p = v - ((uint16_t)v * s) / 255;
        q = v - ((uint32_t)v * s * f) / (255 * 59);
        t = v - ((uint32_t)v * s * (59 - f)) / (255 * 59);

	switch (i % 6) {
	case 0: *r = v; *g = t; *b = p; break;
	case 1: *r = q; *g = v; *b = p; break;
	case 2: *r = p; *g = v; *b = t; break;
	case 3: *r = p; *g = q; *b = v; break;
	case 4: *r = t; *g = p; *b = v; break;
	case 5: *r = v; *g = p; *b = q; break;
	}
}