void rgb(uint8_t *data, int i, int r, int g, int b)
{
if (i >= 0 && i <= 5) {
data += 2;
data[3*i+0] = b;
data[3*i+1] = g;
data[3*i+2] = r;
}
}
static
uint8_t clamp(unsigned long x) {
return x < 0 ? 0 : x > 255 ? 255 : x;
}
void rgbshade(uint8_t *data, int i, int a)
{
if (i >= 0 && i <= 5) {
data += 2;
data[3*i+0] = clamp(data[3*i+0] * a / 256);
data[3*i+1] = clamp(data[3*i+1] * a / 256);
data[3*i+2] = clamp(data[3*i+2] * a / 256);
}
}
unsigned long
hsv2rgb(double h, double s, double v)
{
double r, g, b;
double f, p, q, t;
int i;
i = (int)floor(h * 6);
f = h * 6 - i;
p = v * (1 - s);
q = v * (1 - f * s);
t = v * (1 - (1 - f) * s);
switch (i) {
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;
}