float res[11];
i_img timg;
- mm_log((1,"i_conv(im* 0x%x,coeff 0x%x,len %d)\n",im,coeff,len));
+ mm_log((1,"i_conv(im %p, coeff %p, len %d)\n",im,coeff,len));
i_img_empty_ch(&timg,im->xsize,im->ysize,im->channels);
center=(len-1)/2;
-
+ /* don't move the calculation of pc up here, it depends on which pixels
+ are readable */
for(l=0;l<im->ysize;l++) {
for(i=0;i<im->xsize;i++) {
pc=0.0;
for(ch=0;ch<im->channels;ch++) res[ch]=0;
for(c=0;c<len;c++)
if (i_gpix(im,i+c-center,l,&rcolor)!=-1) {
- for(ch=0;ch<im->channels;ch++) res[ch]+=(float)(rcolor.channel[ch])*coeff[c];
+ for(ch=0;ch<im->channels;ch++)
+ res[ch]+=(float)(rcolor.channel[ch])*coeff[c];
pc+=coeff[c];
}
- for(ch=0;ch<im->channels;ch++) rcolor.channel[ch]=(unsigned char)(((res[ch]/pc>255.0)?255.0:res[ch]/pc));
+ for(ch=0;ch<im->channels;ch++) {
+ double temp = res[ch]/pc;
+ rcolor.channel[ch] =
+ temp < 0 ? 0 : temp > 255 ? 255 : (unsigned char)temp;
+ }
i_ppix(&timg,i,l,&rcolor);
}
}
for(c=0;c<len;c++)
if (i_gpix(&timg,l,i+c-center,&rcolor)!=-1)
{
- for(ch=0;ch<im->channels;ch++) res[ch]+=(float)(rcolor.channel[ch])*coeff[c];
+ for(ch=0;ch<im->channels;ch++)
+ res[ch]+=(float)(rcolor.channel[ch])*coeff[c];
pc+=coeff[c];
}
- for(ch=0;ch<im->channels;ch++) rcolor.channel[ch]=(unsigned char)(((res[ch]/(float)(pc)>255.0)?255.0:res[ch]/(float)(pc)));
+ for(ch=0;ch<im->channels;ch++) {
+ double temp = res[ch]/pc;
+ rcolor.channel[ch]=
+ temp < 0 ? 0 : temp > 255 ? 255 : (unsigned char)temp;
+ }
i_ppix(im,l,i,&rcolor);
}
}
+ i_img_exorcise(&timg);
}