diff options
| author | Niko Kiirala <niko@kiirala.com> | 2009-04-05 15:49:17 +0000 |
|---|---|---|
| committer | kiirala <kiirala@users.sourceforge.net> | 2009-04-05 15:49:17 +0000 |
| commit | 5f674c1e5b578da56bf0c79932081b50a543d825 (patch) | |
| tree | 935023e5cb3c5e91c92762b43a2689e5a87a0671 /src | |
| parent | Fix a divide-by-zero problem apparently introduced in r21012. (diff) | |
| download | inkscape-5f674c1e5b578da56bf0c79932081b50a543d825.tar.gz inkscape-5f674c1e5b578da56bf0c79932081b50a543d825.zip | |
Fixed offset in interpolation in nr-filter-displacement-map
(bzr r7626)
Diffstat (limited to 'src')
| -rw-r--r-- | src/display/nr-filter-displacement-map.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/display/nr-filter-displacement-map.cpp b/src/display/nr-filter-displacement-map.cpp index d2b1c2a0b..3c59d70e7 100644 --- a/src/display/nr-filter-displacement-map.cpp +++ b/src/display/nr-filter-displacement-map.cpp @@ -9,6 +9,12 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ +#include <cmath> +#if defined (SOLARIS) && (SOLARIS == 8) +#include "round.h" +using Inkscape::round; +#endif + #include "display/nr-filter-displacement-map.h" #include "display/nr-filter-types.h" #include "display/nr-filter-units.h" @@ -53,12 +59,13 @@ static pixel_t interpolatePixels(NRPixBlock const* pb, double x, double y) { unsigned int const sfl = 8u; unsigned int const sf = 1u<<sfl; unsigned int const sf2h = 1u<<(2u*sfl-1); - int xi = (int)floor(x), yi = (int)floor(y); - unsigned int xf = static_cast<unsigned int>(floor(sf*(x-xi)+.5)), yf = static_cast<unsigned int>(floor(sf*(y-yi)+.5)); - pixel_t p00 = pixelValue(pb, xi+0, yi+0); - pixel_t p01 = pixelValue(pb, xi+1, yi+0); - pixel_t p10 = pixelValue(pb, xi+0, yi+1); - pixel_t p11 = pixelValue(pb, xi+1, yi+1); + int xi = (int)round(x), yi = (int)round(y); + unsigned int xf = static_cast<unsigned int>(round(sf * (x - (xi - 0.5)))), + yf = static_cast<unsigned int>(round(sf * (y - (yi - 0.5)))); + pixel_t p00 = pixelValue(pb, xi-1, yi-1); + pixel_t p01 = pixelValue(pb, xi-0, yi-1); + pixel_t p10 = pixelValue(pb, xi-1, yi-0); + pixel_t p11 = pixelValue(pb, xi-0, yi-0); /* It's a good idea to interpolate premultiplied colors: * |
