]> git.imager.perl.org - imager.git/blobdiff - filters.c
- added .pcf and .pcf.gz to the list of extensions supported by ft2
[imager.git] / filters.c
index e801488e0898427c9a149ad413a3a431331de8d4..e7d58e3aab240eb4508ae610392e856d8ae9e19e 100644 (file)
--- a/filters.c
+++ b/filters.c
@@ -649,7 +649,10 @@ i_watermark(i_img *im, i_img *wmark, int tx, int ty, int pixdiff) {
   int vx, vy, ch;
   i_color val, wval;
 
-  for(vx=0;vx<128;vx++) for(vy=0;vy<110;vy++) {
+       int mx = wmark->xsize;
+       int my = wmark->ysize;
+
+  for(vx=0;vx<mx;vx++) for(vy=0;vy<my;vy++) {
     
     i_gpix(im,    tx+vx, ty+vy,&val );
     i_gpix(wmark, vx,    vy,   &wval);
@@ -960,7 +963,7 @@ i_gradgen(i_img *im, int num, int *xo, int *yo, i_color *ival, int dmeasure) {
        fdist[p]  = xd*xd + yd*yd; /* euclidean distance */
        break;
       case 2: /* euclidean squared */
-       fdist[p]  = max(xd*xd, yd*yd); /* manhattan distance */
+       fdist[p]  = i_max(xd*xd, yd*yd); /* manhattan distance */
        break;
       default:
        m_fatal(3,"i_gradgen: Unknown distance measure\n");
@@ -1013,7 +1016,7 @@ i_nearest_color_foo(i_img *im, int num, int *xo, int *yo, i_color *ival, int dme
       mindist = xd*xd + yd*yd; /* euclidean distance */
       break;
     case 2: /* euclidean squared */
-      mindist = max(xd*xd, yd*yd); /* manhattan distance */
+      mindist = i_max(xd*xd, yd*yd); /* manhattan distance */
       break;
     default:
       m_fatal(3,"i_nearest_color: Unknown distance measure\n");
@@ -1030,7 +1033,7 @@ i_nearest_color_foo(i_img *im, int num, int *xo, int *yo, i_color *ival, int dme
        curdist = xd*xd + yd*yd; /* euclidean distance */
        break;
       case 2: /* euclidean squared */
-       curdist = max(xd*xd, yd*yd); /* manhattan distance */
+       curdist = i_max(xd*xd, yd*yd); /* manhattan distance */
        break;
       default:
        m_fatal(3,"i_nearest_color: Unknown distance measure\n");
@@ -1083,7 +1086,7 @@ i_nearest_color(i_img *im, int num, int *xo, int *yo, i_color *oval, int dmeasur
       mindist = xd*xd + yd*yd; /* euclidean distance */
       break;
     case 2: /* euclidean squared */
-      mindist = max(xd*xd, yd*yd); /* manhattan distance */
+      mindist = i_max(xd*xd, yd*yd); /* manhattan distance */
       break;
     default:
       m_fatal(3,"i_nearest_color: Unknown distance measure\n");
@@ -1100,7 +1103,7 @@ i_nearest_color(i_img *im, int num, int *xo, int *yo, i_color *oval, int dmeasur
        curdist = xd*xd + yd*yd; /* euclidean distance */
        break;
       case 2: /* euclidean squared */
-       curdist = max(xd*xd, yd*yd); /* manhattan distance */
+       curdist = i_max(xd*xd, yd*yd); /* manhattan distance */
        break;
       default:
        m_fatal(3,"i_nearest_color: Unknown distance measure\n");
@@ -1225,8 +1228,8 @@ i_diff_image(i_img *im1, i_img *im2, int mindiff) {
   if (outchans == 1 || outchans == 3)
     ++outchans;
 
-  xsize = min(im1->xsize, im2->xsize);
-  ysize = min(im1->ysize, im2->ysize);
+  xsize = i_min(im1->xsize, im2->xsize);
+  ysize = i_min(im1->ysize, im2->ysize);
 
   out = i_sametype_chans(im1, xsize, ysize, outchans);
   
@@ -1242,6 +1245,11 @@ i_diff_image(i_img *im1, i_img *im2, int mindiff) {
     for (y = 0; y < ysize; ++y) {
       i_glin(im1, 0, xsize, y, line1);
       i_glin(im2, 0, xsize, y, line2);
+      if (outchans != diffchans) {
+        /* give the output an alpha channel since it doesn't have one */
+        for (x = 0; x < xsize; ++x)
+          line2[x].channel[diffchans] = 255;
+      }
       for (x = 0; x < xsize; ++x) {
         int diff = 0;
         for (ch = 0; ch < diffchans; ++ch) {
@@ -1271,6 +1279,11 @@ i_diff_image(i_img *im1, i_img *im2, int mindiff) {
     for (y = 0; y < ysize; ++y) {
       i_glinf(im1, 0, xsize, y, line1);
       i_glinf(im2, 0, xsize, y, line2);
+      if (outchans != diffchans) {
+        /* give the output an alpha channel since it doesn't have one */
+        for (x = 0; x < xsize; ++x)
+          line2[x].channel[diffchans] = 1.0;
+      }
       for (x = 0; x < xsize; ++x) {
         int diff = 0;
         for (ch = 0; ch < diffchans; ++ch) {