X-Git-Url: http://git.imager.perl.org/imager.git/blobdiff_plain/73962964481c4e85fc999d7944fee872cc391238..e1c0692925:/gaussian.im diff --git a/gaussian.im b/gaussian.im index 34fe8134..7e937692 100644 --- a/gaussian.im +++ b/gaussian.im @@ -1,9 +1,10 @@ +#define IMAGER_NO_CONTEXT #include "imager.h" #include static double gauss(int x, double std) { - return 1.0/(sqrt(2.0*PI)*std)*exp(-(double)(x)*(float)(x)/(2*std*std)); + return 1.0/(sqrt(2.0*PI)*std)*exp(-(double)(x)*(double)(x)/(2*std*std)); } /* Counters are as follows @@ -18,14 +19,16 @@ gauss(int x, double std) { int i_gaussian(i_img *im, double stddev) { - int i,l,c,ch; + int i, c, ch; + i_img_dim x, y; double pc; double *coeff; double res[MAXCHANNELS]; i_img *timg; int radius, diameter; + dIMCTXim(im); - mm_log((1,"i_gaussian(im %p, stdev %.2f)\n",im,stddev)); + im_log((aIMCTX, 1,"i_gaussian(im %p, stdev %.2f)\n",im,stddev)); i_clear_error(); if (stddev <= 0) { @@ -59,41 +62,41 @@ i_gaussian(i_img *im, double stddev) { #code im->bits <= 8 IM_COLOR rcolor; - for(l=0;lysize;l++) { - for(i=0;ixsize;i++) { + for(y = 0; y < im->ysize; y++) { + for(x = 0; x < im->xsize; x++) { pc=0.0; for(ch=0;chchannels;ch++) res[ch]=0; for(c = 0;c < diameter; c++) - if (IM_GPIX(im,i+c-radius,l,&rcolor)!=-1) { + if (IM_GPIX(im,x+c-radius,y,&rcolor)!=-1) { for(ch=0;chchannels;ch++) res[ch]+= rcolor.channel[ch] * coeff[c]; pc+=coeff[c]; } for(ch=0;chchannels;ch++) { double value = res[ch] / pc; - rcolor.channel[ch] = value > IM_SAMPLE_MAX ? IM_SAMPLE_MAX : value; + rcolor.channel[ch] = value > IM_SAMPLE_MAX ? IM_SAMPLE_MAX : IM_ROUND(value); } - IM_PPIX(timg,i,l,&rcolor); + IM_PPIX(timg, x, y, &rcolor); } } - for(l=0;lxsize;l++) { - for(i=0;iysize;i++) { + for(x = 0;x < im->xsize; x++) { + for(y = 0; y < im->ysize; y++) { pc=0.0; for(ch=0; chchannels; ch++) res[ch]=0; for(c=0; c < diameter; c++) - if (IM_GPIX(timg,l,i+c-radius,&rcolor)!=-1) { + if (IM_GPIX(timg, x, y+c-radius, &rcolor)!=-1) { for(ch=0;chchannels;ch++) res[ch]+= rcolor.channel[ch] * coeff[c]; pc+=coeff[c]; } for(ch=0;chchannels;ch++) { double value = res[ch]/pc; - rcolor.channel[ch] = value > IM_SAMPLE_MAX ? IM_SAMPLE_MAX : value; + rcolor.channel[ch] = value > IM_SAMPLE_MAX ? IM_SAMPLE_MAX : IM_ROUND(value); } - IM_PPIX(im,l,i,&rcolor); + IM_PPIX(im, x, y, &rcolor); } } #/code