]> granicus.if.org Git - imagemagick/commitdiff
Revert optimization to QuantizeImage with a much simpler solution.
authordirk <dirk@git.imagemagick.org>
Mon, 6 Jul 2015 20:46:23 +0000 (20:46 +0000)
committerdirk <dirk@git.imagemagick.org>
Mon, 6 Jul 2015 20:46:23 +0000 (20:46 +0000)
MagickCore/quantize.c

index 324c3be04cf8860058ffe57e884d901045951c3b..81dc6b77a665c7e2dc947d2cf566d331c92b4a26 100644 (file)
@@ -2655,63 +2655,6 @@ static void PruneToCubeDepth(const Image *image,CubeInfo *cube_info,
 %
 */
 
-static MagickBooleanType DirectToPseudoClassImage(Image *image,
-  CubeInfo *cube_info,ExceptionInfo *exception)
-{
-  MagickBooleanType
-    status;
-
-  ssize_t
-    y;
-
-  if (cube_info->colors > cube_info->maximum_colors)
-    return(MagickFalse);
-  if (PreAssignImageColors(image,cube_info,exception) == MagickFalse)
-    ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed",
-      image->filename);
-  status=MagickTrue;
-#if defined(MAGICKCORE_OPENMP_SUPPORT)
-  #pragma omp parallel for schedule(static,4) shared(status) \
-     magick_threads(image,image,image->rows,1)
-#endif
-  for (y=0; y < (ssize_t) image->rows; y++)
-  {
-    register Quantum
-      *restrict q;
-
-    register ssize_t
-      x;
-
-    if (status == MagickFalse)
-      continue;
-    q=GetAuthenticPixels(image,0,y,image->columns,1,exception);
-    if (q == (Quantum *) NULL)
-      {
-        status=MagickFalse;
-        continue;
-      }
-    for (x=0; x < (ssize_t) image->columns; x++)
-    {
-      register ssize_t
-        i;
-
-      for (i=0; i < (ssize_t) image->colors; i++)
-      {
-        if (IsPixelEquivalent(image,q,&image->colormap[i]) == MagickFalse)
-          continue;
-        SetPixelIndex(image,(Quantum) i,q);
-        break;
-      }
-      q+=GetPixelChannels(image);
-    }
-    if (SyncAuthenticPixels(image,exception) == MagickFalse)
-      status=MagickFalse;
-  }
-  image->storage_class=PseudoClass;
-  PostAssignImageColors(image,cube_info,exception);
-  return(status);
-}
-
 static MagickBooleanType DirectToColormapImage(Image *image,
   ExceptionInfo *exception)
 {
@@ -2846,14 +2789,14 @@ MagickExport MagickBooleanType QuantizeImage(const QuantizeInfo *quantize_info,
   if (status != MagickFalse)
     {
       /*
-        Reduce the number of colors in the image.
+        Reduce the number of colors in the image if it contains more than the
+        maximum, otherwise we can disable dithering to improve the performance.
       */
-      status=DirectToPseudoClassImage(image,cube_info,exception);
-      if (status == MagickFalse)
-      {
+      if (cube_info->colors > cube_info->maximum_colors)
         ReduceImageColors(image,cube_info);
-        status=AssignImageColors(image,cube_info,exception);
-      }
+      else
+        cube_info->quantize_info->dither_method=NoDitherMethod;
+      status=AssignImageColors(image,cube_info,exception);
     }
   DestroyCubeInfo(cube_info);
   return(status);