]> granicus.if.org Git - imagemagick/blobdiff - coders/ps2.c
(no commit message)
[imagemagick] / coders / ps2.c
index 47c3b0f9c34589812660d2ad872f5db6a18643df..7052f14aad40726e8d0fcd8a568156b9ab6ab1b6 100644 (file)
 %                      Write Postscript Level II Format                       %
 %                                                                             %
 %                              Software Design                                %
-%                                John Cristy                                  %
+%                                   Cristy                                    %
 %                                 July 1992                                   %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2012 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2015 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  %
@@ -115,15 +115,17 @@ ModuleExport size_t RegisterPS2Image(void)
 
   entry=SetMagickInfo("EPS2");
   entry->encoder=(EncodeImageHandler *) WritePS2Image;
-  entry->adjoin=MagickFalse;
-  entry->seekable_stream=MagickTrue;
+  entry->flags^=CoderAdjoinFlag;
+  entry->flags|=CoderSeekableStreamFlag;
   entry->description=ConstantString("Level II Encapsulated PostScript");
+  entry->mime_type=ConstantString("application/postscript");
   entry->module=ConstantString("PS2");
   (void) RegisterMagickInfo(entry);
   entry=SetMagickInfo("PS2");
   entry->encoder=(EncodeImageHandler *) WritePS2Image;
-  entry->seekable_stream=MagickTrue;
+  entry->flags|=CoderSeekableStreamFlag;
   entry->description=ConstantString("Level II PostScript");
+  entry->mime_type=ConstantString("application/postscript");
   entry->module=ConstantString("PS2");
   (void) RegisterMagickInfo(entry);
   return(MagickImageCoderSignature);
@@ -585,7 +587,7 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
           {
             (void) FormatLocaleString(buffer,MaxTextExtent,
               "%%%%BoundingBox: %.20g %.20g %.20g %.20g\n",ceil(bounds.x1-0.5),
-              ceil(bounds.y1-0.5),floor(bounds.x2-0.5),floor(bounds.y2-0.5));
+              ceil(bounds.y1-0.5),floor(bounds.x2+0.5),floor(bounds.y2+0.5));
             (void) WriteBlobString(image,buffer);
             (void) FormatLocaleString(buffer,MaxTextExtent,
               "%%%%HiResBoundingBox: %g %g %g %g\n",bounds.x1,
@@ -610,6 +612,9 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
                 "%%%%Pages: %.20g\n",(double) GetImageListLength(image));
             (void) WriteBlobString(image,buffer);
           }
+        if (image->colorspace == CMYKColorspace)
+          (void) WriteBlobString(image,
+            "%%DocumentProcessColors: Cyan Magenta Yellow Black\n");
         (void) WriteBlobString(image,"%%EndComments\n");
         (void) WriteBlobString(image,"\n%%BeginDefaults\n");
         (void) WriteBlobString(image,"%%EndDefaults\n\n");
@@ -769,6 +774,9 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
           case RLECompression:
           default:
           {
+            MemoryInfo
+              *pixel_info;
+
             register unsigned char
               *q;
 
@@ -776,12 +784,12 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
               Allocate pixel array.
             */
             length=(size_t) number_pixels;
-            pixels=(unsigned char *) AcquireQuantumMemory(length,
-              sizeof(*pixels));
-            if (pixels == (unsigned char *) NULL)
+            pixel_info=AcquireVirtualMemory(length,sizeof(*pixels));
+            if (pixel_info == (MemoryInfo *) NULL)
               ThrowWriterException(ResourceLimitError,"MemoryAllocationFailed");
+            pixels=(unsigned char *) GetVirtualMemoryBlob(pixel_info);
             /*
-              Dump Runlength encoded pixels.
+              Dump runlength encoded pixels.
             */
             q=pixels;
             for (y=0; y < (ssize_t) image->rows; y++)
@@ -791,7 +799,7 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
                 break;
               for (x=0; x < (ssize_t) image->columns; x++)
               {
-                *q++=ScaleQuantumToChar(GetPixelIntensity(image,p));
+                *q++=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
                 p+=GetPixelChannels(image);
               }
               progress=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -804,7 +812,7 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
               status=LZWEncodeImage(image,length,pixels,exception);
             else
               status=PackbitsEncodeImage(image,length,pixels,exception);
-            pixels=(unsigned char *) RelinquishMagickMemory(pixels);
+            pixel_info=RelinquishVirtualMemory(pixel_info);
             if (status == MagickFalse)
               {
                 (void) CloseBlob(image);
@@ -825,8 +833,8 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
                 break;
               for (x=0; x < (ssize_t) image->columns; x++)
               {
-                Ascii85Encode(image,ScaleQuantumToChar(
-                  GetPixelIntensity(image,p)));
+                Ascii85Encode(image,ScaleQuantumToChar(ClampToQuantum(
+                  GetPixelLuma(image,p))));
                 p+=GetPixelChannels(image);
               }
               progress=SetImageProgress(image,SaveImageTag,(MagickOffsetType)
@@ -841,7 +849,7 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
       }
     else
       if ((image->storage_class == DirectClass) || (image->colors > 256) ||
-          (compression == JPEGCompression) || (image->alpha_trait == BlendPixelTrait))
+          (compression == JPEGCompression) || (image->alpha_trait != UndefinedPixelTrait))
         {
           (void) FormatLocaleString(buffer,MaxTextExtent,"%.20g %.20g\n0\n%d\n",
             (double) image->columns,(double) image->rows,(int)
@@ -865,6 +873,9 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
             case RLECompression:
             default:
             {
+              MemoryInfo
+                *pixel_info;
+
               register unsigned char
                 *q;
 
@@ -872,13 +883,13 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
                 Allocate pixel array.
               */
               length=(size_t) number_pixels;
-              pixels=(unsigned char *) AcquireQuantumMemory(length,
-                4*sizeof(*pixels));
-              if (pixels == (unsigned char *) NULL)
+              pixel_info=AcquireVirtualMemory(length,4*sizeof(*pixels));
+              if (pixel_info == (MemoryInfo *) NULL)
                 ThrowWriterException(ResourceLimitError,
                   "MemoryAllocationFailed");
+              pixels=(unsigned char *) GetVirtualMemoryBlob(pixel_info);
               /*
-                Dump Packbit encoded pixels.
+                Dump runlength encoded pixels.
               */
               q=pixels;
               for (y=0; y < (ssize_t) image->rows; y++)
@@ -888,7 +899,7 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
                   break;
                 for (x=0; x < (ssize_t) image->columns; x++)
                 {
-                  if ((image->alpha_trait == BlendPixelTrait) &&
+                  if ((image->alpha_trait != UndefinedPixelTrait) &&
                       (GetPixelAlpha(image,p) == (Quantum) TransparentAlpha))
                     {
                       *q++=ScaleQuantumToChar(QuantumRange);
@@ -926,7 +937,7 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
                   (void) CloseBlob(image);
                   return(MagickFalse);
                 }
-              pixels=(unsigned char *) RelinquishMagickMemory(pixels);
+              pixel_info=RelinquishVirtualMemory(pixel_info);
               break;
             }
             case NoCompression:
@@ -942,7 +953,7 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
                   break;
                 for (x=0; x < (ssize_t) image->columns; x++)
                 {
-                  if ((image->alpha_trait == BlendPixelTrait) &&
+                  if ((image->alpha_trait != UndefinedPixelTrait) &&
                       (GetPixelAlpha(image,p) == (Quantum) TransparentAlpha))
                     {
                       Ascii85Encode(image,ScaleQuantumToChar((Quantum)
@@ -1013,6 +1024,9 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
             case RLECompression:
             default:
             {
+              MemoryInfo
+                *pixel_info;
+
               register unsigned char
                 *q;
 
@@ -1020,13 +1034,13 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
                 Allocate pixel array.
               */
               length=(size_t) number_pixels;
-              pixels=(unsigned char *) AcquireQuantumMemory(length,
-                sizeof(*pixels));
-              if (pixels == (unsigned char *) NULL)
+              pixel_info=AcquireVirtualMemory(length,sizeof(*pixels));
+              if (pixel_info == (MemoryInfo *) NULL)
                 ThrowWriterException(ResourceLimitError,
                   "MemoryAllocationFailed");
+              pixels=(unsigned char *) GetVirtualMemoryBlob(pixel_info);
               /*
-                Dump Runlength encoded pixels.
+                Dump runlength encoded pixels.
               */
               q=pixels;
               for (y=0; y < (ssize_t) image->rows; y++)
@@ -1049,7 +1063,7 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
                 status=LZWEncodeImage(image,length,pixels,exception);
               else
                 status=PackbitsEncodeImage(image,length,pixels,exception);
-              pixels=(unsigned char *) RelinquishMagickMemory(pixels);
+              pixel_info=RelinquishVirtualMemory(pixel_info);
               if (status == MagickFalse)
                 {
                   (void) CloseBlob(image);
@@ -1111,7 +1125,7 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image,
     {
       (void) FormatLocaleString(buffer,MaxTextExtent,
         "%%%%BoundingBox: %.20g %.20g %.20g %.20g\n",ceil(bounds.x1-0.5),
-        ceil(bounds.y1-0.5),floor(bounds.x2-0.5),floor(bounds.y2-0.5));
+        ceil(bounds.y1-0.5),floor(bounds.x2+0.5),floor(bounds.y2+0.5));
       (void) WriteBlobString(image,buffer);
       (void) FormatLocaleString(buffer,MaxTextExtent,
         "%%%%HiResBoundingBox: %g %g %g %g\n",bounds.x1,bounds.y1,