]> granicus.if.org Git - imagemagick/commitdiff
Fix the occcasional interpolated black pixel in distort problem
authoranthony <anthony@git.imagemagick.org>
Tue, 28 Sep 2010 12:02:25 +0000 (12:02 +0000)
committeranthony <anthony@git.imagemagick.org>
Tue, 28 Sep 2010 12:02:25 +0000 (12:02 +0000)
ChangeLog
magick/resample.c

index cc80f3e684bf83b8f04b13002dc2d30475480514..0a578275a417a4f4d134c8ac9097fd97c134d6b6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -9,6 +9,7 @@
   * Replace the blurry "High Quality EWA" technique with a 'Clamped EWA'
     for Distort Resampling.  This makes -distort a whole lot nicer
     and allows for the use of better cylindrical filters.
+  * Bug fix for -filter point distorts (occasional generating black pixels)
 
 2010-09-26  6.6.4-7 Anthony Thyssen <A.Thyssen@griffith...>
   * Fix Point filter for ResizeImage() caused by support limiting the
index 89fb9b1b0ec70ee2acba9cef224fc5d2be83259b..db683c9111cc97dbf28b92587afa52bc1efc3de2 100644 (file)
@@ -71,9 +71,9 @@
 #define EWA_CLAMP 1           /* EWA Clamping from Nicolas Robidoux */
 
 /* output debugging information */
-#define DEBUG_NO_HIT_PIXELS 1 /* Make pixels that fail to 'hit' anything red */
 #define DEBUG_ELLIPSE 0       /* output ellipse info for debug */
-#define DEBUG_HIT_MISS 0      /* output hit/miss pixels with above switch */
+#define DEBUG_HIT_MISS 0      /* output hit/miss pixels (as gnuplot commands) */
+#define DEBUG_NO_PIXEL_HIT 0  /* Make pixels that fail to hit anything - RED */
 
 /*
   Typedef declarations.
@@ -391,6 +391,7 @@ static MagickBooleanType InterpolateResampleFilter(
   assert(resample_filter != (ResampleFilter *) NULL);
   assert(resample_filter->signature == MagickSignature);
   status=MagickTrue;
+
   switch (method)
   {
     case AverageInterpolatePixel:
@@ -876,10 +877,6 @@ MagickExport MagickBooleanType ResamplePixelColor(
   assert(resample_filter != (ResampleFilter *) NULL);
   assert(resample_filter->signature == MagickSignature);
 
-#if DEBUG_ELLIPSE
-  fprintf(stderr, "u0=%lf; v0=%lf;\n", u0, v0);
-#endif
-
   status=MagickTrue;
   GetMagickPixelPacket(resample_filter->image,pixel);
   if ( resample_filter->do_interpolate ) {
@@ -888,6 +885,10 @@ MagickExport MagickBooleanType ResamplePixelColor(
     return(status);
   }
 
+#if DEBUG_ELLIPSE
+  fprintf(stderr, "u0=%lf; v0=%lf;\n", u0, v0);
+#endif
+
   /*
     Does resample area Miss the image?
     And is that area a simple solid color - then return that color
@@ -1547,7 +1548,6 @@ MagickExport void ScaleResampleFilter(ResampleFilter *resample_filter,
   assert(resample_filter->signature == MagickSignature);
 
   resample_filter->limit_reached = MagickFalse;
-  resample_filter->do_interpolate = MagickFalse;
 
   /* A 'point' filter forces use of interpolation instead of area sampling */
   if ( resample_filter->filter == PointFilter )
@@ -1753,6 +1753,7 @@ MagickExport void SetResampleFilter(ResampleFilter *resample_filter,
   assert(resample_filter != (ResampleFilter *) NULL);
   assert(resample_filter->signature == MagickSignature);
 
+  resample_filter->do_interpolate = MagickFalse;
   resample_filter->filter = filter;
 
   if ( filter == PointFilter )
@@ -1762,7 +1763,7 @@ MagickExport void SetResampleFilter(ResampleFilter *resample_filter,
     }
 
   if ( filter == UndefinedFilter )
-    resample_filter->filter = LanczosFilter;
+    resample_filter->filter = MitchellFilter;  /* a far less blurry filter */
 
   resize_filter = AcquireResizeFilter(resample_filter->image,
        resample_filter->filter,blur,MagickTrue,resample_filter->exception);