public void ConvertFromRGB(Colorf rgb) { this.a = rgb.a; float rp = rgb.r, gp = rgb.g, bp = rgb.b; float cmax = rp; int cmaxwhich = 0; /* faster comparison afterwards */ if (gp > cmax) { cmax = gp; cmaxwhich = 1; } if (bp > cmax) { cmax = bp; cmaxwhich = 2; } float cmin = rp; //int cminwhich = 0; if (gp < cmin) { cmin = gp; /*cminwhich = 1;*/ } if (bp < cmin) { cmin = bp; /*cminwhich = 2;*/ } float delta = cmax - cmin; /* HUE */ if (delta == 0) { this.h = 0; } else { switch (cmaxwhich) { case 0: /* cmax == rp */ h = 60.0f * (((gp - bp) / delta) % 6.0f); break; case 1: /* cmax == gp */ h = 60.0f * (((bp - rp) / delta) + 2); break; case 2: /* cmax == bp */ h = 60.0f * (((rp - gp) / delta) + 4); break; } if (h < 0) { h += 360.0f; } } /* LIGHTNESS/VALUE */ //l = (cmax + cmin) / 2; v = cmax; /* SATURATION */ /*if (delta == 0) { * r_s = 0; * } else { * r_s = delta / (1 - fabs (1 - (2 * (l - 1)))); * }*/ if (cmax == 0) { s = 0; } else { s = delta / cmax; } }
public ColorHSV(Colorf rgb) { ConvertFromRGB(rgb); }