]> granicus.if.org Git - imagemagick/blobdiff - coders/ps3.c
Accommodate background color index in PLTE chunk
[imagemagick] / coders / ps3.c
index 3a813fd841ee91810b423cc11eb2de21bfc23617..c80881b31761f22a0b50938e34f827a689949159 100644 (file)
@@ -18,7 +18,7 @@
 %                                 July 1992                                   %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2011 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  %
@@ -45,6 +45,7 @@
 #include "MagickCore/blob.h"
 #include "MagickCore/blob-private.h"
 #include "MagickCore/cache.h"
+#include "MagickCore/channel.h"
 #include "MagickCore/color.h"
 #include "MagickCore/color-private.h"
 #include "MagickCore/compress.h"
@@ -266,7 +267,7 @@ static MagickBooleanType SerializeImage(const ImageInfo *image_info,
   q=(*pixels);
   for (y=0; y < (ssize_t) image->rows; y++)
   {
-    p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+    p=GetVirtualPixels(image,0,y,image->columns,1,exception);
     if (p == (const Quantum *) NULL)
       break;
     if (image->colorspace != CMYKColorspace)
@@ -330,7 +331,7 @@ static MagickBooleanType SerializeImageChannel(const ImageInfo *image_info,
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   status=MagickTrue;
-  pack=IsImageMonochrome(image,&image->exception) == MagickFalse ? 1UL : 8UL;
+  pack=IsImageMonochrome(image,exception) == MagickFalse ? 1UL : 8UL;
   padded_columns=((image->columns+pack-1)/pack)*pack;
   *length=(size_t) padded_columns*image->rows/pack;
   *pixels=(unsigned char *) AcquireQuantumMemory(*length,sizeof(**pixels));
@@ -430,9 +431,6 @@ static MagickBooleanType SerializeImageIndexes(const ImageInfo *image_info,
 static MagickBooleanType WritePS3MaskImage(const ImageInfo *image_info,
   Image *image,const CompressionType compression,ExceptionInfo *exception)
 {
-  ChannelType
-    channel_mask;
-
   char
     buffer[MaxTextExtent];
 
@@ -518,17 +516,9 @@ static MagickBooleanType WritePS3MaskImage(const ImageInfo *image_info,
   }
   (void) WriteBlobString(image,buffer);
   (void) WriteBlobString(image,"/ReusableStreamDecode filter\n");
-  mask_image=CloneImage(image,0,0,MagickTrue,&image->exception);
+  mask_image=SeparateImage(image,AlphaChannel,exception);
   if (mask_image == (Image *) NULL)
-    ThrowWriterException(CoderError,image->exception.reason);
-  channel_mask=SetPixelChannelMask(mask_image,AlphaChannel);
-  status=SeparateImage(mask_image);
-  (void) SetPixelChannelMap(mask_image,channel_mask);
-  if (status == MagickFalse)
-    {
-      mask_image=DestroyImage(mask_image);
-      return(MagickFalse);
-    }
+    ThrowWriterException(CoderError,exception->reason);
   (void) SetImageType(mask_image,BilevelType,exception);
   (void) SetImageType(mask_image,PaletteType,exception);
   mask_image->matte=MagickFalse;
@@ -926,8 +916,8 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image,
     */
     delta.x=DefaultResolution;
     delta.y=DefaultResolution;
-    resolution.x=image->x_resolution;
-    resolution.y=image->y_resolution;
+    resolution.x=image->resolution.x;
+    resolution.y=image->resolution.y;
     if ((resolution.x == 0.0) || (resolution.y == 0.0))
       {
         flags=ParseGeometry(PSDensityGeometry,&geometry_info);
@@ -981,7 +971,7 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image,
     if (image_info->pointsize != 0.0)
       pointsize=image_info->pointsize;
     text_size=0;
-    value=GetImageProperty(image,"label");
+    value=GetImageProperty(image,"label",exception);
     if (value != (const char *) NULL)
       text_size=(size_t) (MultilineCensus(value)*pointsize+12);
     page++;
@@ -1038,7 +1028,7 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image,
         /*
           Font resources
         */
-        value=GetImageProperty(image,"label");
+        value=GetImageProperty(image,"label",exception);
         if (value != (const char *) NULL)
           (void) WriteBlobString(image,
             "%%DocumentNeededResources: font Helvetica\n");
@@ -1072,7 +1062,7 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image,
         /*
           One label line for each line in label string.
         */
-        value=GetImageProperty(image,"label");
+        value=GetImageProperty(image,"label",exception);
         if (value != (const char *) NULL)
           {
               (void) WriteBlobString(image,"\n  %% Labels.\n  /Helvetica "
@@ -1130,21 +1120,21 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image,
     /*
       Page font resource if there's a label.
     */
-    value=GetImageProperty(image,"label");
+    value=GetImageProperty(image,"label",exception);
     if (value != (const char *) NULL)
       (void) WriteBlobString(image,"%%PageResources: font Helvetica\n");
     /*
       PS clipping path from Photoshop clipping path.
     */
-    if ((image->clip_mask == (Image *) NULL) ||
-        (LocaleNCompare("8BIM:",image->clip_mask->magick_filename,5) != 0))
+    if ((image->mask != MagickFalse) ||
+        (LocaleNCompare("8BIM:",image->magick_filename,5) != 0))
       (void) WriteBlobString(image,"/ClipImage {} def\n");
     else
       {
         const char
           *value;
 
-        value=GetImageProperty(image,image->clip_mask->magick_filename);
+        value=GetImageProperty(image,image->magick_filename,exception);
         if (value == (const char *) NULL)
           return(MagickFalse);
         (void) WriteBlobString(image,value);
@@ -1184,7 +1174,7 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image,
       Output labels.
     */
     labels=(char **) NULL;
-    value=GetImageProperty(image,"label");
+    value=GetImageProperty(image,"label",exception);
     if (value != (const char *) NULL)
       labels=StringToList(value);
     if (labels != (char **) NULL)
@@ -1212,8 +1202,8 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image,
     /*
       Photoshop clipping path active?
     */
-    if ((image->clip_mask != (Image *) NULL) &&
-        (LocaleNCompare("8BIM:",image->clip_mask->magick_filename,5) == 0))
+    if ((image->mask != MagickFalse) &&
+        (LocaleNCompare("8BIM:",image->magick_filename,5) == 0))
         (void) WriteBlobString(image,"true\n");
       else
         (void) WriteBlobString(image,"false\n");