/* * FLOATIMG * calculer un histogramme et l'afficher */ #include #include #include #include "../floatimg.h" extern int verbosity; /* --------------------------------------------------------------------- */ int fimg_calcul_histo(FloatImg *src, long *ghist, int sz) { float maxval; int x, y, idx; float rgb[3], moy; fprintf(stderr, ">>> %s ( %p %p %d )\n", __func__, src, ghist, sz); maxval = fimg_get_maxvalue(src); fprintf(stderr, "maximum is %f\n", maxval); for (y=0; yheight; y++) { for(x=0; xwidth; x++) { fimg_get_rgb(src, x, y, rgb); moy = (rgb[0]+rgb[1]+rgb[2]) / 3.0; /* ok, here the had math part ... */ idx = (int)( (moy*sz) / maxval); /* sanity check */ if (idx<0 || idx>=sz) { fprintf(stderr, "idx = %d, error\n", idx); abort(); } ghist[idx]++; } } return -66; } /* --------------------------------------------------------------------- */ #define NSLICES 999 int fimg_essai_histo(FloatImg *src, char *outpic, int k) { long histo[NSLICES]; int foo; FILE *pipe; fprintf(stderr, ">>> %s ( %p '%s' %d )\n", __func__, src, outpic, k); memset(histo, 0, NSLICES*sizeof(long)); foo = fimg_calcul_histo(src, histo, NSLICES); for (foo=0; foo