]> granicus.if.org Git - imagemagick/blobdiff - coders/hald.c
Accommodate background color index in PLTE chunk
[imagemagick] / coders / hald.c
index 47bc79a3449ac7797dc8413161bb8e07e5c4a62e..fddddd6512f204e220d8c4106e5f4e47b107a74b 100644 (file)
@@ -17,7 +17,7 @@
 %                                 July 1992                                   %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2012 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  %
 /*
   Include declarations.
 */
-#include "magick/studio.h"
-#include "magick/blob.h"
-#include "magick/blob-private.h"
-#include "magick/cache.h"
-#include "magick/colorspace.h"
-#include "magick/exception.h"
-#include "magick/exception-private.h"
-#include "magick/image.h"
-#include "magick/image-private.h"
-#include "magick/list.h"
-#include "magick/magick.h"
-#include "magick/memory_.h"
-#include "magick/module.h"
-#include "magick/monitor.h"
-#include "magick/monitor-private.h"
-#include "magick/quantum-private.h"
-#include "magick/static.h"
-#include "magick/string_.h"
-#include "magick/string-private.h"
+#include "MagickCore/studio.h"
+#include "MagickCore/blob.h"
+#include "MagickCore/blob-private.h"
+#include "MagickCore/cache.h"
+#include "MagickCore/colorspace.h"
+#include "MagickCore/exception.h"
+#include "MagickCore/exception-private.h"
+#include "MagickCore/image.h"
+#include "MagickCore/image-private.h"
+#include "MagickCore/list.h"
+#include "MagickCore/magick.h"
+#include "MagickCore/memory_.h"
+#include "MagickCore/module.h"
+#include "MagickCore/monitor.h"
+#include "MagickCore/monitor-private.h"
+#include "MagickCore/pixel-accessor.h"
+#include "MagickCore/quantum-private.h"
+#include "MagickCore/resource_.h"
+#include "MagickCore/static.h"
+#include "MagickCore/string_.h"
+#include "MagickCore/string-private.h"
+#include "MagickCore/thread-private.h"
 \f
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -92,9 +95,6 @@ static Image *ReadHALDImage(const ImageInfo *image_info,
   Image
     *image;
 
-  long
-    y;
-
   MagickBooleanType
     status;
 
@@ -102,6 +102,9 @@ static Image *ReadHALDImage(const ImageInfo *image_info,
     cube_size,
     level;
 
+  ssize_t
+    y;
+
   /*
     Create HALD color lookup table image.
   */
@@ -112,7 +115,7 @@ static Image *ReadHALDImage(const ImageInfo *image_info,
       image_info->filename);
   assert(exception != (ExceptionInfo *) NULL);
   assert(exception->signature == MagickSignature);
-  image=AcquireImage(image_info);
+  image=AcquireImage(image_info,exception);
   level=0;
   if (*image_info->filename != '\0')
     level=StringToUnsignedLong(image_info->filename);
@@ -120,37 +123,42 @@ static Image *ReadHALDImage(const ImageInfo *image_info,
     level=8;
   status=MagickTrue;
   cube_size=level*level;
-  image->columns=(unsigned long) (level*cube_size);
-  image->rows=(unsigned long) (level*cube_size);
-  for (y=0; y < (long) image->rows; y+=(long) level)
+  image->columns=(size_t) (level*cube_size);
+  image->rows=(size_t) (level*cube_size);
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+  #pragma omp parallel for schedule(static,8) shared(status) \
+    dynamic_number_threads(image,image->columns,image->rows,1)
+#endif
+  for (y=0; y < (ssize_t) image->rows; y+=(ssize_t) level)
   {
-    long
+    ssize_t
       blue,
       green,
       red;
 
-    register PixelPacket
+    register Quantum
       *restrict q;
 
     if (status == MagickFalse)
       continue;
-    q=QueueAuthenticPixels(image,0,y,image->columns,(unsigned long) level,
+    q=QueueAuthenticPixels(image,0,y,image->columns,(size_t) level,
       exception);
-    if (q == (PixelPacket *) NULL)
+    if (q == (Quantum *) NULL)
       {
         status=MagickFalse;
         continue;
       }
-    blue=y/(long) level;
-    for (green=0; green < (long) cube_size; green++)
+    blue=y/(ssize_t) level;
+    for (green=0; green < (ssize_t) cube_size; green++)
     {
-      for (red=0; red < (long) cube_size; red++)
+      for (red=0; red < (ssize_t) cube_size; red++)
       {
-        q->red=ClampToQuantum(QuantumRange*red/(cube_size-1.0));
-        q->green=ClampToQuantum(QuantumRange*green/(cube_size-1.0));
-        q->blue=ClampToQuantum(QuantumRange*blue/(cube_size-1.0));
-        SetOpacityPixelComponent(q,OpaqueOpacity);
-        q++;
+        SetPixelRed(image,ClampToQuantum(QuantumRange*red/(cube_size-1.0)),q);
+        SetPixelGreen(image,ClampToQuantum(QuantumRange*green/(cube_size-1.0)),
+          q);
+        SetPixelBlue(image,ClampToQuantum(QuantumRange*blue/(cube_size-1.0)),q);
+        SetPixelAlpha(image,OpaqueAlpha,q);
+        q+=GetPixelChannels(image);
       }
     }
     if (SyncAuthenticPixels(image,exception) == MagickFalse)
@@ -179,10 +187,10 @@ static Image *ReadHALDImage(const ImageInfo *image_info,
 %
 %  The format of the RegisterHALDImage method is:
 %
-%      unsigned long RegisterHALDImage(void)
+%      size_t RegisterHALDImage(void)
 %
 */
-ModuleExport unsigned long RegisterHALDImage(void)
+ModuleExport size_t RegisterHALDImage(void)
 {
   MagickInfo
     *entry;
@@ -190,7 +198,7 @@ ModuleExport unsigned long RegisterHALDImage(void)
   entry=SetMagickInfo("HALD");
   entry->decoder=(DecodeImageHandler *) ReadHALDImage;
   entry->adjoin=MagickFalse;
-  entry->format_type=ExplicitFormatType;
+  entry->format_type=ImplicitFormatType;
   entry->raw=MagickTrue;
   entry->endian_support=MagickTrue;
   entry->description=ConstantString("Identity Hald color lookup table image");