From 463be1d2244a49e2a30de108cfd413f20a66d7ec Mon Sep 17 00:00:00 2001 From: anthony Date: Sun, 26 Sep 2010 01:07:36 +0000 Subject: [PATCH] Point filter fix (Error in Box function) --- ChangeLog | 4 ++++ magick/resize.c | 36 +++++++++++++++++------------------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index c26a46d08..8bee84466 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2010-09-26 6.6.4-7 Anthony Thyssen + * Fix Point filter for ResizeImage() caused by support limiting the + Box weighting function. + 2010-09-24 6.6.4-6 Nicolas Robidoux * Now that MagickPIL is a MagickRealType, some casts are unneeded. diff --git a/magick/resize.c b/magick/resize.c index 02b2b3fbd..180f438a4 100644 --- a/magick/resize.c +++ b/magick/resize.c @@ -177,15 +177,14 @@ static MagickRealType Bohman(const MagickRealType x, return((1.0-x)*cospix+(1.0/MagickPIL)*sinpix); } -static MagickRealType Box(const MagickRealType x, - const ResizeFilter *resize_filter) +static MagickRealType Box(const MagickRealType magick_unused(x), + const ResizeFilter *magick_unused(resize_filter)) { /* Return a Box filter up to its support size. + DO NOT LIMIT results by support or resize point sampling will fil */ - if ( x < resize_filter->support ) - return(1.0); - return(0.0); + return(1.0); } static MagickRealType CubicBC(const MagickRealType x, @@ -982,17 +981,16 @@ MagickExport ResizeFilter *AcquireResizeFilter(const Image *image, x; /* - Reset the filter_type for specific compound filters so the - actual 'function' is returned, not the user selection. - Specifically this is needed for the Sinc and Cubic compound - filters. + Set the weighting function properly when the weighting + function may not exactly match the filter of the same name. + EG: a Point filter really uses a Box weighting function + with a different support than is typically used. + */ - if (resize_filter->filter == Sinc) - filter_type=SincFilter; - if (resize_filter->filter == SincFast) - filter_type=SincFastFilter; - if (resize_filter->filter == CubicBC) - filter_type=CubicFilter; + if (resize_filter->filter == Box) filter_type=BoxFilter; + if (resize_filter->filter == Sinc) filter_type=SincFilter; + if (resize_filter->filter == SincFast) filter_type=SincFastFilter; + if (resize_filter->filter == CubicBC) filter_type=CubicFilter; /* Report Filter Details. */ @@ -1001,14 +999,14 @@ MagickExport ResizeFilter *AcquireResizeFilter(const Image *image, (void) fprintf(stdout,"# filter = %s\n",MagickOptionToMnemonic( MagickFilterOptions,filter_type)); (void) fprintf(stdout,"# window = %s\n",MagickOptionToMnemonic( - MagickFilterOptions, window_type)); + MagickFilterOptions, window_type)); (void) fprintf(stdout,"# support = %.*g\n",GetMagickPrecision(), - (double) resize_filter->support); + (double) resize_filter->support); (void) fprintf(stdout,"# win-support = %.*g\n",GetMagickPrecision(), - (double) resize_filter->window_support); + (double) resize_filter->window_support); (void) fprintf(stdout,"# blur = %.*g\n",GetMagickPrecision(), (double) resize_filter->blur); - (void) fprintf(stdout,"# blurred_support = %.*g\n",GetMagickPrecision(), + (void) fprintf(stdout,"# blurred_support = %.*g\n",GetMagickPrecision(), (double) support); (void) fprintf(stdout,"# B,C = %.*g,%.*g\n",GetMagickPrecision(), (double) B,GetMagickPrecision(),(double) C); -- 2.50.1