]> granicus.if.org Git - imagemagick/blobdiff - magick/histogram.c
(no commit message)
[imagemagick] / magick / histogram.c
index 3c58d24246338a15b689488b583d2a5fb85bbf3e..5027c53e6a7ea228ef3474ba3dfec7248a86253a 100644 (file)
@@ -18,7 +18,7 @@
 %                                August 2009                                  %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2011 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  %
@@ -183,9 +183,6 @@ static CubeInfo *ClassifyImageColors(const Image *image,
   CubeInfo
     *cube_info;
 
-  ssize_t
-    y;
-
   MagickBooleanType
     proceed;
 
@@ -202,15 +199,18 @@ static CubeInfo *ClassifyImageColors(const Image *image,
   register const PixelPacket
     *p;
 
-  register ssize_t
-    i,
-    x;
-
   register size_t
     id,
     index,
     level;
 
+  register ssize_t
+    i,
+    x;
+
+  ssize_t
+    y;
+
   /*
     Initialize color description tree.
   */
@@ -286,7 +286,7 @@ static CubeInfo *ClassifyImageColors(const Image *image,
           node_info->list[i].pixel=(*p);
           if ((image->colorspace == CMYKColorspace) ||
               (image->storage_class == PseudoClass))
-            node_info->list[i].index=indexes[x];
+            node_info->list[i].index=GetIndexPixelComponent(indexes+x);
           node_info->list[i].count=1;
           node_info->number_unique++;
           cube_info->colors++;
@@ -483,7 +483,7 @@ static CubeInfo *GetCubeInfo(void)
   /*
     Initialize tree to describe color cube.
   */
-  cube_info=(CubeInfo *) AcquireQuantumMemory(1,sizeof(*cube_info));
+  cube_info=(CubeInfo *) AcquireMagickMemory(sizeof(*cube_info));
   if (cube_info == (CubeInfo *) NULL)
     return((CubeInfo *) NULL);
   (void) ResetMagickMemory(cube_info,0,sizeof(*cube_info));
@@ -594,7 +594,7 @@ static NodeInfo *GetNodeInfo(CubeInfo *cube_info,const size_t level)
       /*
         Allocate a new nodes of nodes.
       */
-      nodes=(Nodes *) AcquireQuantumMemory(1,sizeof(*nodes));
+      nodes=(Nodes *) AcquireMagickMemory(sizeof(*nodes));
       if (nodes == (Nodes *) NULL)
         return((NodeInfo *) NULL);
       nodes->next=cube_info->node_queue;
@@ -646,9 +646,6 @@ MagickExport MagickBooleanType IsHistogramImage(const Image *image,
   CubeInfo
     *cube_info;
 
-  ssize_t
-    y;
-
   MagickPixelPacket
     pixel,
     target;
@@ -673,6 +670,9 @@ MagickExport MagickBooleanType IsHistogramImage(const Image *image,
     index,
     level;
 
+  ssize_t
+    y;
+
   assert(image != (Image *) NULL);
   assert(image->signature == MagickSignature);
   if (image->debug != MagickFalse)
@@ -757,7 +757,7 @@ MagickExport MagickBooleanType IsHistogramImage(const Image *image,
           node_info->list[i].pixel=(*p);
           if ((image->colorspace == CMYKColorspace) ||
               (image->storage_class == PseudoClass))
-            node_info->list[i].index=indexes[x];
+            node_info->list[i].index=GetIndexPixelComponent(indexes+x);
           node_info->list[i].count=1;
           node_info->number_unique++;
           cube_info->colors++;
@@ -809,9 +809,6 @@ MagickExport MagickBooleanType IsPaletteImage(const Image *image,
   CubeInfo
     *cube_info;
 
-  ssize_t
-    y;
-
   MagickPixelPacket
     pixel,
     target;
@@ -836,6 +833,9 @@ MagickExport MagickBooleanType IsPaletteImage(const Image *image,
     index,
     level;
 
+  ssize_t
+    y;
+
   assert(image != (Image *) NULL);
   assert(image->signature == MagickSignature);
   if (image->debug != MagickFalse)
@@ -920,7 +920,7 @@ MagickExport MagickBooleanType IsPaletteImage(const Image *image,
           node_info->list[i].pixel=(*p);
           if ((image->colorspace == CMYKColorspace) ||
               (image->storage_class == PseudoClass))
-            node_info->list[i].index=indexes[x];
+            node_info->list[i].index=GetIndexPixelComponent(indexes+x);
           node_info->list[i].count=1;
           node_info->number_unique++;
           cube_info->colors++;
@@ -953,7 +953,7 @@ MagickExport MagickBooleanType IsPaletteImage(const Image *image,
 %  stretch the colors (and histogram) of the image.  The stretch points are
 %  also moved further inward by the adjustment values given.
 %
-%  If the adjustment values are both zero this function is equivelent to a
+%  If the adjustment values are both zero this function is equivalent to a
 %  perfect normalization (or autolevel) of the image.
 %
 %  Each channel is stretched independantally of each other (producing color
@@ -1161,6 +1161,7 @@ MagickExport size_t GetNumberColors(const Image *image,FILE *file,
     HistogramCompare);
   GetMagickPixelPacket(image,&pixel);
   p=histogram;
+  status=MagickTrue;
   for (i=0; i < (ssize_t) number_colors; i++)
   {
     SetMagickPixelPacket(image,&p->pixel,&p->index,&pixel);
@@ -1183,8 +1184,8 @@ MagickExport size_t GetNumberColors(const Image *image,FILE *file,
     (void) ConcatenateMagickString(tuple,")",MaxTextExtent);
     (void) QueryMagickColorname(image,&pixel,SVGCompliance,color,exception);
     GetColorTuple(&pixel,MagickTrue,hex);
-    (void) fprintf(file,"%10" MagickSizeFormat,p->count);
-    (void) fprintf(file,": %s %s %s\n",tuple,hex,color);
+    (void) FormatLocaleFile(file,"%10" MagickSizeFormat,p->count);
+    (void) FormatLocaleFile(file,": %s %s %s\n",tuple,hex,color);
     if (image->progress_monitor != (MagickProgressMonitor) NULL)
       {
         MagickBooleanType
@@ -1199,6 +1200,8 @@ MagickExport size_t GetNumberColors(const Image *image,FILE *file,
   }
   (void) fflush(file);
   histogram=(ColorPacket *) RelinquishMagickMemory(histogram);
+  if (status == MagickFalse)
+    return(0);
   return(number_colors);
 }
 \f
@@ -1260,6 +1263,7 @@ static void UniqueColorsToImage(Image *unique_image,CacheView *unique_view,
       register PixelPacket
         *restrict q;
 
+      status=MagickTrue;
       p=node_info->list;
       for (i=0; i < (ssize_t) node_info->number_unique; i++)
       {
@@ -1287,6 +1291,8 @@ static void UniqueColorsToImage(Image *unique_image,CacheView *unique_view,
             status=MagickFalse;
         }
       cube_info->progress++;
+      if (status == MagickFalse)
+        return;
     }
 }