]> granicus.if.org Git - imagemagick/blobdiff - coders/ps3.c
(no commit message)
[imagemagick] / coders / ps3.c
index 73eadc46294905d14334678346c5926bbfdaf4e1..521c78f4bd34a0b952eda0cfe328e3e470442188 100644 (file)
@@ -18,7 +18,7 @@
 %                                 July 1992                                   %
 %                                                                             %
 %                                                                             %
-%  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  %
@@ -129,11 +129,13 @@ ModuleExport size_t RegisterPS3Image(void)
   entry->encoder=(EncodeImageHandler *) WritePS3Image;
   entry->description=ConstantString("Level III Encapsulated PostScript");
   entry->module=ConstantString("PS3");
+  entry->seekable_stream=MagickTrue;
   (void) RegisterMagickInfo(entry);
   entry=SetMagickInfo("PS3");
   entry->encoder=(EncodeImageHandler *) WritePS3Image;
   entry->description=ConstantString("Level III PostScript");
   entry->module=ConstantString("PS3");
+  entry->seekable_stream=MagickTrue;
   (void) RegisterMagickInfo(entry);
   return(MagickImageCoderSignature);
 }
@@ -228,13 +230,9 @@ static MagickBooleanType Huffman2DEncodeImage(const ImageInfo *image_info,
   return(status);
 }
 
-
 static MagickBooleanType SerializeImage(const ImageInfo *image_info,
   Image *image,unsigned char **pixels,size_t *length)
 {
-  ssize_t
-    y;
-
   MagickBooleanType
     status;
 
@@ -250,13 +248,16 @@ static MagickBooleanType SerializeImage(const ImageInfo *image_info,
   register unsigned char
     *q;
 
+  ssize_t
+    y;
+
   assert(image != (Image *) NULL);
   assert(image->signature == MagickSignature);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   status=MagickTrue;
-  *length=(image->colorspace == CMYKColorspace ? 4 : 3)*
-    (size_t) image->columns*image->rows;
+  *length=(image->colorspace == CMYKColorspace ? 4 : 3)*(size_t)
+    image->columns*image->rows;
   *pixels=(unsigned char *) AcquireQuantumMemory(*length,sizeof(**pixels));
   if (*pixels == (unsigned char *) NULL)
     ThrowWriterException(ResourceLimitError,"MemoryAllocationFailed");
@@ -281,13 +282,13 @@ static MagickBooleanType SerializeImage(const ImageInfo *image_info,
         *q++=ScaleQuantumToChar(GetRedPixelComponent(p));
         *q++=ScaleQuantumToChar(GetGreenPixelComponent(p));
         *q++=ScaleQuantumToChar(GetBluePixelComponent(p));
-        *q++=ScaleQuantumToChar(indexes[x]);
+        *q++=ScaleQuantumToChar(GetIndexPixelComponent(indexes+x));
         p++;
       }
     if (image->previous == (Image *) NULL)
       {
         status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
-                image->rows);
+          image->rows);
         if (status == MagickFalse)
           break;
       }
@@ -300,9 +301,6 @@ static MagickBooleanType SerializeImage(const ImageInfo *image_info,
 static MagickBooleanType SerializeImageChannel(const ImageInfo *image_info,
   Image *image,unsigned char **pixels,size_t *length)
 {
-  ssize_t
-    y;
-
   MagickBooleanType
     status;
 
@@ -315,14 +313,17 @@ static MagickBooleanType SerializeImageChannel(const ImageInfo *image_info,
   register unsigned char
     *q;
 
-  unsigned char
-    code,
-    bit;
-
   size_t
     pack,
     padded_columns;
 
+  ssize_t
+    y;
+
+  unsigned char
+    code,
+    bit;
+
   assert(image != (Image *) NULL);
   assert(image->signature == MagickSignature);
   if (image->debug != MagickFalse)
@@ -353,8 +354,8 @@ static MagickBooleanType SerializeImageChannel(const ImageInfo *image_info,
         {
           bit=(unsigned char) 0x00;
           if (x < (ssize_t) image->columns)
-            bit=(unsigned char) (PixelIntensityToQuantum(p) ==
-              (Quantum) TransparentOpacity ? 0x01 : 0x00);
+            bit=(unsigned char) (PixelIntensityToQuantum(p) == (Quantum)
+              TransparentOpacity ? 0x01 : 0x00);
           code=(code << 1)+bit;
           if (((x+1) % pack) == 0)
             {
@@ -365,7 +366,7 @@ static MagickBooleanType SerializeImageChannel(const ImageInfo *image_info,
         }
       }
     status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
-                image->rows);
+      image->rows);
     if (status == MagickFalse)
       break;
   }
@@ -377,9 +378,6 @@ static MagickBooleanType SerializeImageChannel(const ImageInfo *image_info,
 static MagickBooleanType SerializeImageIndexes(const ImageInfo *image_info,
   Image *image,unsigned char **pixels,size_t *length)
 {
-  ssize_t
-    y;
-
   MagickBooleanType
     status;
 
@@ -395,6 +393,9 @@ static MagickBooleanType SerializeImageIndexes(const ImageInfo *image_info,
   register unsigned char
     *q;
 
+  ssize_t
+    y;
+
   assert(image != (Image *) NULL);
   assert(image->signature == MagickSignature);
   if (image->debug != MagickFalse)
@@ -412,11 +413,11 @@ static MagickBooleanType SerializeImageIndexes(const ImageInfo *image_info,
       break;
     indexes=GetVirtualIndexQueue(image);
     for (x=0; x < (ssize_t) image->columns; x++)
-      *q++=(unsigned char) indexes[x];
+      *q++=(unsigned char) GetIndexPixelComponent(indexes+x);
     if (image->previous == (Image *) NULL)
       {
         status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
-                image->rows);
+          image->rows);
         if (status == MagickFalse)
           break;
       }
@@ -465,8 +466,8 @@ static MagickBooleanType WritePS3MaskImage(const ImageInfo *image_info,
   */
   start=TellBlob(image);
   (void) FormatMagickString(buffer,MaxTextExtent,
-    "%%%%BeginData:%13ld %s Bytes\n",0L,
-    compression == NoCompression ? "ASCII" : "BINARY");
+    "%%%%BeginData:%13ld %s Bytes\n",0L,compression == NoCompression ?
+    "ASCII" : "BINARY");
   (void) WriteBlobString(image,buffer);
   stop=TellBlob(image);
   /*
@@ -478,37 +479,37 @@ static MagickBooleanType WritePS3MaskImage(const ImageInfo *image_info,
     default:
     {
       (void) FormatMagickString(buffer,MaxTextExtent,
-        "currentfile %lu %lu "PS3_NoCompression" ByteStreamDecodeFilter\n",
-        image->columns,image->rows);
+        "currentfile %.20g %.20g "PS3_NoCompression" ByteStreamDecodeFilter\n",
+        (double) image->columns,(double) image->rows);
       break;
     }
     case FaxCompression:
     case Group4Compression:
     {
       (void) FormatMagickString(buffer,MaxTextExtent,
-        "currentfile %lu %lu "PS3_FaxCompression" ByteStreamDecodeFilter\n",
-        image->columns,image->rows);
+        "currentfile %.20g %.20g "PS3_FaxCompression" ByteStreamDecodeFilter\n",
+        (double) image->columns,(double) image->rows);
       break;
     }
     case LZWCompression:
     {
       (void) FormatMagickString(buffer,MaxTextExtent,
-        "currentfile %lu %lu "PS3_LZWCompression" ByteStreamDecodeFilter\n",
-        image->columns,image->rows);
+        "currentfile %.20g %.20g "PS3_LZWCompression" ByteStreamDecodeFilter\n",
+        (double) image->columns,(double) image->rows);
       break;
     }
     case RLECompression:
     {
       (void) FormatMagickString(buffer,MaxTextExtent,
-        "currentfile %lu %lu "PS3_RLECompression" ByteStreamDecodeFilter\n",
-        image->columns,image->rows);
+        "currentfile %.20g %.20g "PS3_RLECompression" ByteStreamDecodeFilter\n",
+        (double) image->columns,(double) image->rows);
       break;
     }
     case ZipCompression:
     {
       (void) FormatMagickString(buffer,MaxTextExtent,
-        "currentfile %lu %lu "PS3_ZipCompression" ByteStreamDecodeFilter\n",
-        image->columns,image->rows);
+        "currentfile %.20g %.20g "PS3_ZipCompression" ByteStreamDecodeFilter\n",
+        (double) image->columns,(double) image->rows);
       break;
     }
   }
@@ -589,7 +590,7 @@ static MagickBooleanType WritePS3MaskImage(const ImageInfo *image_info,
   if (offset < 0)
     ThrowWriterException(CorruptImageError,"ImproperImageHeader");
   (void) FormatMagickString(buffer,MaxTextExtent,
-    "%%%%BeginData:%13ld %s Bytes\n",(ssize_t) length,
+    "%%%%BeginData:%13ld %s Bytes\n",(long) length,
     compression == NoCompression ? "ASCII" : "BINARY");
   (void) WriteBlobString(image,buffer);
   offset=SeekBlob(image,stop,SEEK_SET);
@@ -812,9 +813,6 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image)
   GeometryInfo
     geometry_info;
 
-  ssize_t
-    j;
-
   MagickBooleanType
     status;
 
@@ -844,7 +842,13 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image)
     bounds;
 
   size_t
-    length;
+    length,
+    page,
+    pixel,
+    text_size;
+
+  ssize_t
+    j;
 
   time_t
     timer;
@@ -852,11 +856,6 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image)
   unsigned char
     *pixels;
 
-  size_t
-    page,
-    pixel,
-    text_size;
-
   /*
     Open output image file.
   */
@@ -939,14 +938,15 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image)
         resolution.y=(size_t) (100.0*2.54*resolution.y+0.5)/100.0;
       }
     SetGeometry(image,&geometry);
-    (void) FormatMagickString(page_geometry,MaxTextExtent,"%lux%lu",
-      image->columns,image->rows);
+    (void) FormatMagickString(page_geometry,MaxTextExtent,"%.20gx%.20g",
+      (double) image->columns,(double) image->rows);
     if (image_info->page != (char *) NULL)
       (void) CopyMagickString(page_geometry,image_info->page,MaxTextExtent);
     else
       if ((image->page.width != 0) && (image->page.height != 0))
-        (void) FormatMagickString(page_geometry,MaxTextExtent,"%lux%lu%+ld%+ld",
-          image->page.width,image->page.height,image->page.x,image->page.y);
+        (void) FormatMagickString(page_geometry,MaxTextExtent,
+          "%.20gx%.20g%+.20g%+.20g",(double) image->page.width,(double)
+          image->page.height,(double) image->page.x,(double) image->page.y);
       else
         if ((image->gravity != UndefinedGravity) &&
             (LocaleCompare(image_info->magick,"PS") == 0))
@@ -1044,8 +1044,8 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image)
             if (image_info->adjoin == MagickFalse)
               (void) CopyMagickString(buffer,"%%Pages: 1\n",MaxTextExtent);
             else
-              (void) FormatMagickString(buffer,MaxTextExtent,"%%%%Pages: %lu\n",
-                (size_t) GetImageListLength(image));
+              (void) FormatMagickString(buffer,MaxTextExtent,
+                "%%%%Pages: %.20g\n",(double) GetImageListLength(image));
             (void) WriteBlobString(image,buffer);
           }
         (void) WriteBlobString(image,"%%EndComments\n");
@@ -1085,14 +1085,16 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image)
         }
         (void)WriteBlobString(image,"%%EndProlog\n");
       }
-    (void) FormatMagickString(buffer,MaxTextExtent,"%%%%Page: 1 %lu\n",page);
+    (void) FormatMagickString(buffer,MaxTextExtent,"%%%%Page: 1 %.20g\n",
+      (double) page);
     (void) WriteBlobString(image,buffer);
     /*
       Page bounding box.
     */
     (void) FormatMagickString(buffer,MaxTextExtent,
-      "%%%%PageBoundingBox: %ld %ld %ld %ld\n",geometry.x,geometry.y,geometry.x+
-      (ssize_t) geometry.width,geometry.y+(ssize_t) (geometry.height+text_size));
+      "%%%%PageBoundingBox: %.20g %.20g %.20g %.20g\n",(double) geometry.x,
+       (double) geometry.y,geometry.x+(double) geometry.width,geometry.y+
+       (double) (geometry.height+text_size));
     (void) WriteBlobString(image,buffer);
     /*
       Page process colors if not RGB.
@@ -1164,9 +1166,8 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image)
     /*
       Translate, scale, and font point size.
     */
-    (void) FormatMagickString(buffer,MaxTextExtent,
-      "%ld %ld\n%g %g\n%g\n",geometry.x,geometry.y,scale.x,scale.y,
-      pointsize);
+    (void) FormatMagickString(buffer,MaxTextExtent,"%.20g %.20g\n%g %g\n%g\n",
+      (double) geometry.x,(double) geometry.y,scale.x,scale.y,pointsize);
     (void) WriteBlobString(image,buffer);
     /*
       Output labels.
@@ -1213,9 +1214,9 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image)
     /*
       Image columns, rows, and color space.
     */
-    (void) FormatMagickString(buffer,MaxTextExtent,"%lu %lu\n%s\n",
-      image->columns,image->rows,image->colorspace == CMYKColorspace ?
-      PS3_CMYKColorspace : PS3_RGBColorspace);
+    (void) FormatMagickString(buffer,MaxTextExtent,"%.20g %.20g\n%s\n",
+      (double) image->columns,(double) image->rows,image->colorspace ==
+      CMYKColorspace ? PS3_CMYKColorspace : PS3_RGBColorspace);
     (void) WriteBlobString(image,buffer);
     /*
       Masked image?
@@ -1468,8 +1469,8 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image)
             /*
               Number of colors in color map.
             */
-            (void) FormatMagickString(buffer,MaxTextExtent,"%lu\n",
-              image->colors);
+            (void) FormatMagickString(buffer,MaxTextExtent,"%.20g\n",
+              (double) image->colors);
             (void) WriteBlobString(image,buffer);
             /*
               Color map - uncompressed.
@@ -1558,7 +1559,7 @@ static MagickBooleanType WritePS3Image(const ImageInfo *image_info,Image *image)
     if (offset < 0)
       ThrowWriterException(CorruptImageError,"ImproperImageHeader");
     (void) FormatMagickString(buffer,MaxTextExtent,
-      "%%%%BeginData:%13ld %s Bytes\n",(ssize_t) length,
+      "%%%%BeginData:%13ld %s Bytes\n",(long) length,
       compression == NoCompression ? "ASCII" : "BINARY");
     (void) WriteBlobString(image,buffer);
     offset=SeekBlob(image,stop,SEEK_SET);