[gegl] buffer: fix source rect passed to gegl_resample_{linear, boxfilter}()



commit a7c730cf6e841a46d3b4546b86a234ae59206e9c
Author: Ell <ell_se yahoo com>
Date:   Sun Oct 14 07:32:57 2018 -0400

    buffer: fix source rect passed to gegl_resample_{linear,boxfilter}()
    
    In _gegl_buffer_get_unlocked(), when performing linear- or box-
    filtering, don't include the source-buffer "border" pixels in the
    source rect passed to gegl_resample_linear() and
    gegl_resample_boxfilter(), respectively.  These pixels are needed
    since they might be involved in the arithmeric, but they shouldn't
    be taken into account when transforming coordinates between the
    source and destination coordinate systems.
    
    Update affected mipmap test output.

 gegl/buffer/gegl-buffer-access.c  |  16 +++++++---------
 tests/mipmap/rotate-reference.png | Bin 84628 -> 84631 bytes
 2 files changed, 7 insertions(+), 9 deletions(-)
---
diff --git a/gegl/buffer/gegl-buffer-access.c b/gegl/buffer/gegl-buffer-access.c
index 1bf8f00e9..f2e6a64df 100644
--- a/gegl/buffer/gegl-buffer-access.c
+++ b/gegl/buffer/gegl-buffer-access.c
@@ -2212,8 +2212,6 @@ _gegl_buffer_get_unlocked (GeglBuffer          *buffer,
           case GEGL_BUFFER_FILTER_BILINEAR:
             buf_width  += 1;
             buf_height += 1;
-            sample_rect.width  += factor;
-            sample_rect.height += factor;
             gegl_buffer_iterate_read_dispatch (buffer, &sample_rect,
                                        (guchar*)sample_buf,
                                         buf_width * bpp,
@@ -2221,8 +2219,8 @@ _gegl_buffer_get_unlocked (GeglBuffer          *buffer,
 
             sample_rect.x      = x1;
             sample_rect.y      = y1;
-            sample_rect.width  = x2 - x1 + 1;
-            sample_rect.height = y2 - y1 + 1;
+            sample_rect.width  = x2 - x1;
+            sample_rect.height = y2 - y1;
 
             gegl_resample_bilinear (dest_buf,
                                     sample_buf,
@@ -2246,13 +2244,13 @@ _gegl_buffer_get_unlocked (GeglBuffer          *buffer,
                                           buf_width * bpp,
                                           format, level, repeat_mode);
 
-              sample_rect.x      = x1 - 1;
-              sample_rect.y      = y1 - 1;
-              sample_rect.width  = x2 - x1 + 2;
-              sample_rect.height = y2 - y1 + 2;
+              sample_rect.x      = x1;
+              sample_rect.y      = y1;
+              sample_rect.width  = x2 - x1;
+              sample_rect.height = y2 - y1;
 
               gegl_resample_boxfilter (dest_buf,
-                                       sample_buf,
+                                       (guchar*)sample_buf + offset,
                                        &rect2,
                                        &sample_rect,
                                        buf_width * bpp,
diff --git a/tests/mipmap/rotate-reference.png b/tests/mipmap/rotate-reference.png
index 2ffc5e299..c2e4edef0 100644
Binary files a/tests/mipmap/rotate-reference.png and b/tests/mipmap/rotate-reference.png differ


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