Re: Proposition : GeglInterpolator

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



What I tried to do with the gegl_interpolator was in fact what gimp is doing in gimpdrawable-transform,
Gimp only downsamples in the scale-funcs not during the transformation .
I'm not sure if it is possible to corectly downsample during transformation.

So the resampler should use a transformation matrix, and take source coördinates.
instead of  :

 matrix3_copy (inverse, matrix);
 matrix3_invert (inverse);

 fu = du = inverse[0][0] * dest->x + inverse[0][1] * dest->y + inverse[0][2] - src->x;
 fv = dv = inverse[1][0] * dest->x + inverse[1][1] * dest->y + inverse[1][2] - src->y;

 for (dest_ptr = dest_buf, y = 0; y < dest->height; y++)
   {
     for (x = 0; x < dest->width; x++)
       {
         gegl_interpolator_get (interpolator, fu,  fv, dest_buf);
         fu += inverse [0][0];
         fv += inverse [1][0];
       }
     du += inverse [0][1];
     dv += inverse [1][1];
     fu = du;
     fv = dv;
     ...
   }

The transformed coordinates should be calculated within the resampler.
 gegl_resampler_set_matrix(resampler, matrix);

 for (y = 0; y < dest->height; y++)
   {
     for (x = 0; x < dest->width; x++)
{ gegl_resampler_get (resampler, x, y, dest_buf); }
     ...
   }

The gegl_resampler_get should then calculate the number of transformed coordinates needed by the resampling method (lanczos/bicubic/bilinear/nearest) as in gimpdrawable-transform.

ca= cos a
sa = sin a
.   = don't touch

gegl_resampler_set_matrix_identity()
   | 1    0     0 |
   | 0    1     0 |
| 0 0 1 | gegl_resampler_set_scale(x, y) | *sy . 0 |
   | .    *sy   0 |
   | .    .     1 |
gegl_resampler_set_translscale(tx, ty)
   | .    .     0 |
   | .    .     0 |
   | tx   ty    1 |

gegl_resampler_set_rotate(a)
   | *ca  *sa   0 |
   | *-sa *ca   0 |
   | .    .     1 |

gegl_resampler_set_matrix(a,b,c,d,e,f )
   | a    d    0 |
   | b    e    0 |
   | c    f    1 |

Geert





_______________________________________________
Gegl-developer mailing list
Gegl-developer@xxxxxxxxxxxxxxxxxxxxxx
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer

[Index of Archives]     [Yosemite News]     [Yosemite Photos]     [gtk]     [GIMP Users]     [KDE]     [Gimp's Home]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux