]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/distort.c
(no commit message)
[imagemagick] / MagickCore / distort.c
index d6ce4c458e9d4f95d93649359da022236786f0e1..e4202ba4bf85a629cd8ff97ba72f32865730beed 100644 (file)
 %                     MagickCore Image Distortion Methods                     %
 %                                                                             %
 %                              Software Design                                %
-%                                John Cristy                                  %
+%                                   Cristy                                    %
 %                              Anthony Thyssen                                %
 %                                 June 2007                                   %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2013 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2014 ImageMagick Studio LLC, a non-profit organization      %
 %  dedicated to making software imaging solutions freely available.           %
 %                                                                             %
 %  You may not use this file except in compliance with the License.  You may  %
@@ -44,6 +44,7 @@
 #include "MagickCore/artifact.h"
 #include "MagickCore/cache.h"
 #include "MagickCore/cache-view.h"
+#include "MagickCore/channel.h"
 #include "MagickCore/colorspace-private.h"
 #include "MagickCore/composite-private.h"
 #include "MagickCore/distort.h"
@@ -131,16 +132,6 @@ static void InvertPerspectiveCoefficients(const double *coeff,
   inverse[7]=determinant*(coeff[6]*coeff[1]-coeff[0]*coeff[7]);
 }
 
-static inline double MagickRound(double x)
-{
-  /*
-    Round the fraction to nearest integer.
-  */
-  if (x >= 0.0)
-    return((double) ((ssize_t) (x+0.5)));
-  return((double) ((ssize_t) (x-0.5)));
-}
-
 /*
  * Polynomial Term Defining Functions
  *
@@ -378,6 +369,16 @@ MagickExport Image *AffineTransformImage(const Image *image,
 %  outside other MagickCore library methods.
 */
 
+static inline double MagickRound(double x)
+{
+  /*
+    Round the fraction to nearest integer.
+  */
+  if ((x-floor(x)) < (ceil(x)-x))
+    return(floor(x));
+  return(ceil(x));
+}
+
 static double *GenerateCoefficients(const Image *image,
   DistortImageMethod *method,const size_t number_arguments,
   const double *arguments,size_t number_values,ExceptionInfo *exception)
@@ -1707,9 +1708,6 @@ MagickExport Image *DistortImage(const Image *image,DistortImageMethod method,
   assert(exception != (ExceptionInfo *) NULL);
   assert(exception->signature == MagickSignature);
 
-fprintf(stderr, "distort image->options=%d\n",
-     image->image_info != (ImageInfo *)NULL);
-
   /*
     Handle Special Compound Distortions
   */
@@ -2183,7 +2181,7 @@ fprintf(stderr, "distort image->options=%d\n",
           (void) FormatLocaleFile(stderr, "  c%.20g = %+lf\n", (double) i, coeff[i]);
         (void) FormatLocaleFile(stderr, "DePolar Distort, FX Equivelent:\n");
         (void) FormatLocaleFile(stderr, "%s", image_gen);
-        (void) FormatLocaleFile(stderr, "  -fx 'aa=(i+.5)*%lf %+lf;\n", coeff[6], -coeff[4] );
+        (void) FormatLocaleFile(stderr, "  -fx 'aa=(i+.5)*%lf %+lf;\n", coeff[6], +coeff[4] );
         (void) FormatLocaleFile(stderr, "       rr=(j+.5)*%lf %+lf;\n", coeff[7], +coeff[1] );
         (void) FormatLocaleFile(stderr, "       xx=rr*sin(aa) %+lf;\n", coeff[2] );
         (void) FormatLocaleFile(stderr, "       yy=rr*cos(aa) %+lf;\n", coeff[3] );
@@ -2569,7 +2567,7 @@ fprintf(stderr, "distort image->options=%d\n",
           case DePolarDistortion:
           { /* @D Polar to Carteasain  */
             /* ignore all destination virtual offsets */
-            d.x = ((double)i+0.5)*output_scaling*coeff[6]-coeff[4];
+            d.x = ((double)i+0.5)*output_scaling*coeff[6]+coeff[4];
             d.y = ((double)j+0.5)*output_scaling*coeff[7]+coeff[1];
             s.x = d.y*sin(d.x) + coeff[2];
             s.y = d.y*cos(d.x) + coeff[3];
@@ -3185,13 +3183,17 @@ MagickExport Image *SparseColorImage(const Image *image,
           }
           case VoronoiColorInterpolate:
           default:
-          { /* Just use the closest control point you can find! */
+          {
             size_t
               k;
+
             double
-              minimum = MagickHuge;
+              minimum = MagickMaximumValue;
 
-            for(k=0; k<number_arguments; k+=2+number_colors) {
+            /*
+              Just use the closest control point you can find!
+            */
+            for (k=0; k<number_arguments; k+=2+number_colors) {
               double distance =
                   ((double)i-arguments[ k ])*((double)i-arguments[ k ])
                 + ((double)j-arguments[k+1])*((double)j-arguments[k+1]);