--- CV/CV.xs 2004/04/05 20:55:10 1.8 +++ CV/CV.xs 2005/02/08 12:51:12 1.14 @@ -99,7 +99,7 @@ ///////////////////////////////////////////////////////////////////////////// -MODULE = Gtk2::CV PACKAGE = Gtk2::CV::ImageWindow +MODULE = Gtk2::CV PACKAGE = Gtk2::CV PROTOTYPES: ENABLE @@ -238,6 +238,61 @@ OUTPUT: RETVAL +SV * +make_histogram (SV *ar) + CODE: +{ + int i; + AV *av, *result; + + if (!SvROK (ar) || SvTYPE (SvRV (ar)) != SVt_PVAV) + croak ("Not an array ref as first argument to make_histogram"); + + av = (AV *) SvRV (ar); + result = newAV (); + + for (i = 0; i <= av_len (av); ++i) + { + int bigst, j; + SV *sv = *av_fetch (av, i, 1); + STRLEN len; + char *buf = SvPVbyte (sv, len); + + int tmphist[256]; + char *hist; + + SV *histsv = newSV (257); + SvPOK_on (histsv); + SvCUR_set (histsv, 256); + hist = SvPVX (histsv); + + Zero (tmphist, 256, int); + + j = len; + + while (len--) + ++tmphist[(unsigned char)*buf++ & 0xda]; + + len = j; + + bigst = 1; + for (j = 0; j < 256; ++j) + if (tmphist[j] > bigst) + bigst = tmphist[j]; + + for (j = 0; j < 256; ++j) + hist[j] = tmphist[j] * 255 / (len == 0 ? 1 : len);//bigst; + + av_push (result, histsv); + } + + RETVAL = newRV_noinc ((SV *)result); +} + OUTPUT: + RETVAL + + + ############################################################################# MODULE = Gtk2::CV PACKAGE = Gtk2::CV::PostScript @@ -347,6 +402,28 @@ OUTPUT: RETVAL +SV * +hv84_to_av (unsigned char *hv84) + CODE: +{ + int i = 72 / 3; + AV *av = newAV (); + + RETVAL = (SV *)newRV_noinc ((SV *)av); + while (i--) + { + int h = *hv84++; + int v1 = *hv84++; + int v2 = *hv84++; + + av_push (av, newSViv (v1)); + av_push (av, newSViv ((h >> 4) * 255 / 15)); + av_push (av, newSViv (v2)); + av_push (av, newSViv ((h & 15) * 255 / 15)); + } +} + OUTPUT: + RETVAL