]> granicus.if.org Git - imagemagick/commitdiff
http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=28299
authorCristy <urban-warrior@imagemagick.org>
Wed, 2 Sep 2015 14:06:14 +0000 (10:06 -0400)
committerCristy <urban-warrior@imagemagick.org>
Wed, 2 Sep 2015 14:06:14 +0000 (10:06 -0400)
MagickCore/morphology.c
MagickWand/mogrify.c
MagickWand/operation.c

index 26ea08e94326a7b485993b952fbbe821dcedf6d2..fb185b18a1c39f2d3da27b53a7118d81f03edb72 100644 (file)
@@ -2631,6 +2631,7 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image,
     ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
   for (i=0; i < (ssize_t) GetOpenMPMaximumThreads(); i++)
     changes[i]=0;
+
   if ((method == ConvolveMorphology) && (kernel->width == 1))
     {
       register ssize_t
@@ -2701,14 +2702,11 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image,
               *restrict pixels;
 
             register ssize_t
-              u;
+              v;
 
             size_t
               count;
 
-            ssize_t
-              v;
-
             channel=GetPixelChannelChannel(image,i);
             traits=GetPixelChannelTraits(image,channel);
             morphology_traits=GetPixelChannelTraits(morphology_image,channel);
@@ -2721,7 +2719,7 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image,
                 SetPixelChannel(morphology_image,channel,p[center+i],q);
                 continue;
               }
-            k=(&kernel->values[kernel->width*kernel->height-1]);
+            k=(&kernel->values[kernel->height-1]);
             pixels=p;
             pixel=bias;
             gamma=0.0;
@@ -2729,39 +2727,33 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image,
             if ((morphology_traits & BlendPixelTrait) == 0)
               for (v=0; v < (ssize_t) kernel->height; v++)
               {
-                for (u=0; u < (ssize_t) kernel->width; u++)
-                {
-                  if (!IsNaN(*k))
-                    {
-                      pixel+=(*k)*pixels[i];
-                      gamma+=(*k);
-                      count++;
-                    }
-                  k--;
-                  pixels+=GetPixelChannels(image);
-                }
+                if (!IsNaN(*k))
+                  {
+                    pixel+=(*k)*pixels[i];
+                    gamma+=(*k);
+                    count++;
+                  }
+                k--;
+                pixels+=GetPixelChannels(image);
               }
             else
               for (v=0; v < (ssize_t) kernel->height; v++)
               {
-                for (u=0; u < (ssize_t) kernel->width; u++)
-                {
-                  if (!IsNaN(*k))
-                    {
-                      alpha=(double) (QuantumScale*GetPixelAlpha(image,pixels));
-                      pixel+=alpha*(*k)*pixels[i];
-                      gamma+=alpha*(*k);
-                      count++;
-                    }
-                  k--;
-                  pixels+=GetPixelChannels(image);
-                }
+                if (!IsNaN(*k))
+                  {
+                    alpha=(double) (QuantumScale*GetPixelAlpha(image,pixels));
+                    pixel+=alpha*(*k)*pixels[i];
+                    gamma+=alpha*(*k);
+                    count++;
+                  }
+                k--;
+                pixels+=GetPixelChannels(image);
               }
             if (fabs(pixel-p[center+i]) > MagickEpsilon)
               changes[id]++;
             gamma=PerceptibleReciprocal(gamma);
             if (count != 0)
-              gamma*=(double) kernel->height*kernel->width/count;
+              gamma*=(double) kernel->height/count;
             SetPixelChannel(morphology_image,channel,ClampToQuantum(gamma*
               pixel),q);
           }
index 4790c7bb19d33f4984b5b1ba71dae7811b6e13ac..6d481f0a009cc46b7585523ba0d5b56fefdc5685 100644 (file)
@@ -395,7 +395,9 @@ static MagickBooleanType MonitorProgress(const char *text,
   register char
     *p;
 
-  if (extent < 2)
+  if ((extent <= 1) || (offset < 0) || (offset >= (MagickOffsetType) extent))
+    return(MagickTrue);
+  if ((offset != (MagickOffsetType) (extent-1)) && ((offset % 50) != 0))
     return(MagickTrue);
   (void) CopyMagickMemory(tag,text,MagickPathExtent);
   p=strrchr(tag,'/');
index 1e2bcaa746f54247ae148bb75fbdb7640cd4aa6e..14a835f8125cc39ed8d82d4664ab7567d89a2541 100644 (file)
@@ -101,7 +101,9 @@ static MagickBooleanType MonitorProgress(const char *text,
   register char
     *p;
 
-  if (extent < 2)
+  if ((extent <= 1) || (offset < 0) || (offset >= (MagickOffsetType) extent))
+    return(MagickTrue);
+  if ((offset != (MagickOffsetType) (extent-1)) && ((offset % 50) != 0))
     return(MagickTrue);
   (void) CopyMagickMemory(tag,text,MagickPathExtent);
   p=strrchr(tag,'/');