From ecd58e8ec703be7d48d44cf1a97ee840822148bd Mon Sep 17 00:00:00 2001 From: Cristy Date: Tue, 15 Aug 2017 14:31:56 -0400 Subject: [PATCH] https://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=32506 --- MagickCore/option.c | 4 +-- MagickCore/resample.h | 4 +-- MagickCore/resize.c | 63 +++++++++++++++++++------------------------ 3 files changed, 29 insertions(+), 42 deletions(-) diff --git a/MagickCore/option.c b/MagickCore/option.c index b36f69468..e3bd97ec5 100644 --- a/MagickCore/option.c +++ b/MagickCore/option.c @@ -1164,9 +1164,7 @@ static const OptionInfo { "Sinc", SincFilter, UndefinedOptionFlag, MagickFalse }, { "SincFast", SincFastFilter, UndefinedOptionFlag, MagickFalse }, { "Spline", SplineFilter, UndefinedOptionFlag, MagickFalse }, - { "Spline16", Spline16Filter, UndefinedOptionFlag, MagickFalse }, - { "Spline36", Spline36Filter, UndefinedOptionFlag, MagickFalse }, - { "Spline64", Spline64Filter, UndefinedOptionFlag, MagickFalse }, + { "SplineLobes", SplineLobesFilter, UndefinedOptionFlag, MagickFalse }, { "Triangle", TriangleFilter, UndefinedOptionFlag, MagickFalse }, { "Welch", WelchFilter, UndefinedOptionFlag, MagickFalse }, { "Welsh", WelchFilter, UndefinedOptionFlag, MagickTrue }, /*misspell*/ diff --git a/MagickCore/resample.h b/MagickCore/resample.h index e7461f50d..6fdbc532e 100644 --- a/MagickCore/resample.h +++ b/MagickCore/resample.h @@ -62,9 +62,7 @@ typedef enum CosineFilter, SplineFilter, LanczosRadiusFilter, - Spline16Filter, - Spline36Filter, - Spline64Filter, + SplineLobesFilter, SentinelFilter /* a count of all the filters, not a real filter */ } FilterType; diff --git a/MagickCore/resize.c b/MagickCore/resize.c index 1441324d9..c51c46ac3 100644 --- a/MagickCore/resize.c +++ b/MagickCore/resize.c @@ -500,37 +500,32 @@ static double SincFast(const double x, } } -static double Spline16(const double x, - const ResizeFilter *magick_unused(resize_filter)) -{ - /* - 2-lobe Spline filter. - */ - if (x < 1.0) - return(((x-9.0/5.0)*x-1.0/5.0)*x+1.0); - if (x < 2.0) - return(((-1.0/3.0*(x-1.0)+4.0/5.0)*(x-1.0)-7.0/15.0)*(x-1.0)); - return(0.0); -} - -static double Spline36(const double x, - const ResizeFilter *magick_unused(resize_filter)) -{ - /* - 3-lobe Spline filter. - */ - if (x < 1.0) - return(((13.0/11.0*x-453.0/209.0)*x-3.0/209.0)*x+1.0); - if (x < 2.0) - return(((-6.0/11.0*(x-1.0)+270.0/209.0)*(x-1.0)-156.0/209.0)*(x-1.0)); - if (x < 3.0) - return(((1.0/11.0*(x-2.0)-45.0/209.0)*(x-2.0)+26.0/209.0)*(x-2.0)); - return(0.0); -} - -static double Spline64(const double x, - const ResizeFilter *magick_unused(resize_filter)) +static double SplineLobes(const double x,const ResizeFilter *resize_filter) { + if (resize_filter->support <= 2.0) + { + /* + 2-lobe Spline filter. + */ + if (x < 1.0) + return(((x-9.0/5.0)*x-1.0/5.0)*x+1.0); + if (x < 2.0) + return(((-1.0/3.0*(x-1.0)+4.0/5.0)*(x-1.0)-7.0/15.0)*(x-1.0)); + return(0.0); + } + if (resize_filter->support <= 3.0) + { + /* + 3-lobe Spline filter. + */ + if (x < 1.0) + return(((13.0/11.0*x-453.0/209.0)*x-3.0/209.0)*x+1.0); + if (x < 2.0) + return(((-6.0/11.0*(x-1.0)+270.0/209.0)*(x-1.0)-156.0/209.0)*(x-1.0)); + if (x < 3.0) + return(((1.0/11.0*(x-2.0)-45.0/209.0)*(x-2.0)+26.0/209.0)*(x-2.0)); + return(0.0); + } /* 4-lobe Spline filter. */ @@ -829,9 +824,7 @@ MagickPrivate ResizeFilter *AcquireResizeFilter(const Image *image, { LanczosFilter, CosineFilter }, /* Cosine window (3 lobes) */ { SplineFilter, BoxFilter }, /* Spline Cubic Filter */ { LanczosRadiusFilter, LanczosFilter }, /* Lanczos with integer radius */ - { Spline16Filter, BoxFilter }, /* Spline 16 (2 lobes) */ - { Spline36Filter, BoxFilter }, /* Spline 36 (3 lobes) */ - { Spline64Filter, BoxFilter }, /* Spline 64 (4 lobes) */ + { SplineLobesFilter, BoxFilter }, /* SplineLobes (n lobes) */ }; /* Table mapping the filter/window from the above table to an actual function. @@ -895,9 +888,7 @@ MagickPrivate ResizeFilter *AcquireResizeFilter(const Image *image, { Cosine, 1.0, 1.0, 0.0, 0.0, CosineWeightingFunction }, /* Low level cosine window */ { CubicBC, 2.0, 2.0, 1.0, 0.0, CubicBCWeightingFunction }, /* Cubic B-Spline (B=1,C=0) */ { SincFast, 3.0, 1.0, 0.0, 0.0, SincFastWeightingFunction }, /* Lanczos, Interger Radius */ - { Spline16, 2.0, 0.5, 1.0, 0.0, BoxWeightingFunction }, /* Spline 16 2-lobed */ - { Spline36, 3.0, 0.5, 1.0, 0.0, BoxWeightingFunction }, /* Spline 36 3-lobed */ - { Spline64, 4.0, 0.5, 1.0, 0.0, BoxWeightingFunction }, /* Spline 64 4-lobed */ + { SplineLobes, 2.0, 0.5, 1.0, 0.0, BoxWeightingFunction }, /* Spline Lobes 2-lobed */ }; /* The known zero crossings of the Jinc() or more accurately the Jinc(x*PI) -- 2.40.0