void rgb_to_hsv(int r, int g, int b, float *h, float *s, float *v) {
float rf = r / 255.0;
float gf = g / 255.0;
float bf = b / 255.0;
float cmax = fmaxf(rf, fmaxf(gf, bf));
float cmin = fminf(rf, fminf(gf, bf));
float diff = cmax - cmin;
if (cmax == cmin) {
*h = 0;
} else if (cmax == rf) {
*h = fmodf((60 * ((gf - bf) / diff) + 360), 360);
} else if (cmax == gf) {
*h = fmodf((60 * ((bf - rf) / diff) + 120), 360);
} else if (cmax == bf) {
*h = fmodf((60 * ((rf - gf) / diff) + 240), 360);
}
if (cmax == 0) {
*s = 0;
} else {
*s = (diff / cmax) * 100;
}
*v = cmax * 100;
}