]> granicus.if.org Git - imagemagick/blobdiff - magick/histogram.c
(no commit message)
[imagemagick] / magick / histogram.c
index ff62b828bf63234d66fcf1b8d88e8bc46d99a056..4586bcf72a735f654b159361ff4d80a47cf27921 100644 (file)
@@ -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++;
@@ -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);
@@ -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;
     }
 }