//RGB values = From 0 to 1 int CRotate::RGBtoHSL(double r, double g, double b, double* h, double* s, double* l) { double vmin, vmax, delta; double dr,dg,db; vmin = ccmin( r, g, b ); // Min. value of RGB vmax = ccmax( r, g, b ); // Max. value of RGB delta = vmax - vmin; // Delta RGB value *l = ( vmax + vmin ) / 2; if ( delta == 0 ) // This is a gray, no chroma... { *h = 0; // HSL results = From 0 to 1 *s = 0; } else // Chromatic data... { if ( *l < 0.5 ) *s = delta / ( vmax + vmin ); else *s = delta / ( 2 - vmax - vmin ); dr = ( ( ( vmax - r ) / 6.0 ) + ( delta / 2.0 ) ) / delta; dg = ( ( ( vmax - g ) / 6.0 ) + ( delta / 2.0 ) ) / delta; db = ( ( ( vmax - b ) / 6.0 ) + ( delta / 2.0 ) ) / delta; if ( r == vmax ) *h = db - dg; else if ( g == vmax ) *h = ( 1.0/3.0 ) + dr - db; else if ( b == vmax ) *h = ( 2.0/3.0 ) + dg - dr; if ( *h < 0 ) *h += 1; if ( *h > 1 ) *h -= 1; } return 1; }
int CRotate::RGBtoHSV(double r, double g, double b, double* h, double* s, double* v) { double var_Min; double var_Max; double del_Max; var_Min = ccmin( r, g, b ); //Min. value of RGB var_Max = ccmax( r, g, b ); //Max. value of RGB del_Max = var_Max - var_Min; //Delta RGB value *v = var_Max; if ( del_Max == 0 ) // This is a gray, no chroma... { *h = 0; // HSV results = From 0 to 1 *s = 0; } else // Chromatic data... { double del_R = ( ( ( var_Max - r ) / 6 ) + ( del_Max / 2 ) ) / del_Max; double del_G = ( ( ( var_Max - g ) / 6 ) + ( del_Max / 2 ) ) / del_Max; double del_B = ( ( ( var_Max - b ) / 6 ) + ( del_Max / 2 ) ) / del_Max; *s = del_Max / var_Max; if ( r == var_Max ) *h = del_B - del_G; else if ( g == var_Max ) *h = ( 1./3 ) + del_R - del_B; else if ( b == var_Max ) *h = ( 2./3 ) + del_G - del_R; if ( *h < 0 ) ; *h += 1; if ( *h > 1 ) ; *h -= 1; } return 1; }
int main (int argc, char **argv) { char *xmalloc (); char *xrealloc (); char *xstrdup (); int infpop; double nb; /* Check parameters */ Cmdline *cmd = parseCmdline (argc, argv); if ((cmd->show_helpP) | (argc == 1)) usage (); if (cmd->show_versionP) { printf ("%s %s\n", argv[0], VERSION); exit (0); } check_param (cmd); infpop = (cmd->pop == 0) ? 1 : 0; cmd->precision /= PC; cmd->prevalence /= PC; cmd->level /= PC; cmd->alpha /= PC; cmd->power /= PC; cmd->exposed /= PC; if (cmd->observedP) { nb = small_sampsi (cmd); display_small (cmd, nb); } else if (cmd->odds_ratioP && !cmd->sampleP) { cmd->ratio = floor (cmd->ratio); if (cmd->ratio < 1) sperror ("option -c should be >= 1"); case_control (cmd); } /* Absolute precision then sample size equals population size */ else if (cmd->precision == 0 && cmd->pop > 0) { nb = cmd->pop; display_surv (cmd, nb, infpop); } else if (cmd->precisionP) { nb = sampsi (cmd); display_surv (cmd, nb, infpop); } else if (cmd->binomialP) binom_ci (cmd); else if (cmd->compP && !cmd->sampleP && !cmd->deltaP) comp (cmd); else if (cmd->meansP && !cmd->sampleP && !cmd->deltaP) means (cmd); else if (cmd->sampleP && cmd->exposedP && !cmd->odds_ratioP && cmd->powerP && !cmd->matchedP) ccmin (cmd); else if (cmd->sampleP && cmd->compP && !cmd->deltaP) ppower (cmd); else if (cmd->sampleP && cmd->meansP && !cmd->deltaP) mpower (cmd); else if (cmd->sampleP && cmd->odds_ratioP && cmd->exposedP && !cmd->matchedP) ccpower (cmd); else if (cmd->sampleP && cmd->matchedP && cmd->odds_ratioP && cmd->exposedP) mccpower (cmd); else if (cmd->deltaP && cmd->compP && !cmd->sampleP) nequivp (cmd); else if (cmd->deltaP && cmd->meansP && !cmd->sampleP) nequivm (cmd); else sperror ("wrong combination of options, or missing options"); exit (0); }