13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% PPPP SSSSS 22222 % 73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% P P SS 22 % 83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% PPPP SSS 222 % 93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% P SS 22 % 103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% P SSSSS 22222 % 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Write Postscript Level II Format % 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Software Design % 16de984cdc3631106b1cbbb8d3972b76a0fc27e8e8cristy% Cristy % 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% July 1992 % 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 207ce65e7125a4e1df1a274ce373c537a9df9c16cdCristy% Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization % 213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% dedicated to making software imaging solutions freely available. % 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% You may not use this file except in compliance with the License. You may % 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% obtain a copy of the License at % 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% http://www.imagemagick.org/script/license.php % 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Unless required by applicable law or agreed to in writing, software % 293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% distributed under the License is distributed on an "AS IS" BASIS, % 303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% See the License for the specific language governing permissions and % 323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% limitations under the License. % 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Include declarations. 413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 424c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/studio.h" 434c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/attribute.h" 444c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob.h" 454c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob-private.h" 464c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/cache.h" 474c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/color.h" 484c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/color-private.h" 494c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/compress.h" 504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/constitute.h" 514c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/draw.h" 524c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception.h" 534c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception-private.h" 544c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/geometry.h" 554c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/image.h" 564c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/image-private.h" 574c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/list.h" 584c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/magick.h" 594c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/memory_.h" 604c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/monitor.h" 614c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/monitor-private.h" 624c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/monitor-private.h" 634c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/option.h" 644c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/pixel-accessor.h" 654c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/property.h" 664c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum-private.h" 674c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/resource_.h" 684c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/static.h" 694c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h" 704c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/module.h" 714c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/utility.h" 72809758622d7d1135d333c5394ce4edd4b4c3f150cristy 73809758622d7d1135d333c5394ce4edd4b4c3f150cristy/* 74809758622d7d1135d333c5394ce4edd4b4c3f150cristy Define declarations. 75809758622d7d1135d333c5394ce4edd4b4c3f150cristy*/ 763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_TIFF_DELEGATE) 773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define CCITTParam "-1" 783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#else 793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define CCITTParam "0" 803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Forward declarations. 843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 853ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic MagickBooleanType 861e178e70fb3c956f9fc1e30c3ba863e882666465cristy WritePS2Image(const ImageInfo *,Image *,ExceptionInfo *); 873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% R e g i s t e r P S 2 I m a g e % 943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% RegisterPS2Image() adds properties for the PS2 image format to 1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the list of supported formats. The properties include the image format 1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% tag, a method to read and/or write the format, whether the format 1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% supports the saving of more than one frame to the same file or blob, 1033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% whether the format supports native in-memory I/O, and a brief 1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% description of the format. 1053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the RegisterPS2Image method is: 1073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 108bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t RegisterPS2Image(void) 1093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 111bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristyModuleExport size_t RegisterPS2Image(void) 1123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickInfo 1143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *entry; 1153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11606b627a07ff44e1ff93ef1288c9f428066ded10ddirk entry=AcquireMagickInfo("PS2","EPS2","Level II Encapsulated PostScript"); 1173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry->encoder=(EncodeImageHandler *) WritePS2Image; 11808e9a113db499034abb5ad8d59b42f8eca3c641cdirk entry->flags^=CoderAdjoinFlag; 11908e9a113db499034abb5ad8d59b42f8eca3c641cdirk entry->flags|=CoderSeekableStreamFlag; 1205aefbeb81737693a3f7acf34330f140c64ebe381cristy entry->mime_type=ConstantString("application/postscript"); 1213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) RegisterMagickInfo(entry); 12206b627a07ff44e1ff93ef1288c9f428066ded10ddirk entry=AcquireMagickInfo("PS2","PS2","Level II PostScript"); 1233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry->encoder=(EncodeImageHandler *) WritePS2Image; 12408e9a113db499034abb5ad8d59b42f8eca3c641cdirk entry->flags|=CoderSeekableStreamFlag; 1255aefbeb81737693a3f7acf34330f140c64ebe381cristy entry->mime_type=ConstantString("application/postscript"); 1263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) RegisterMagickInfo(entry); 1273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickImageCoderSignature); 1283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% U n r e g i s t e r P S 2 I m a g e % 1363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% UnregisterPS2Image() removes format registrations made by the 1423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% PS2 module from the list of supported formats. 1433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the UnregisterPS2Image method is: 1453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% UnregisterPS2Image(void) 1473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1493ed852eea50f9d4cd633efb8c2b054b8e33c253cristyModuleExport void UnregisterPS2Image(void) 1503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) UnregisterMagickInfo("EPS2"); 1523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) UnregisterMagickInfo("PS2"); 1533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% W r i t e P S 2 I m a g e % 1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% WritePS2Image translates an image to encapsulated Postscript 1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Level II for printing. If the supplied geometry is null, the image is 1683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% centered on the Postscript page. Otherwise, the image is positioned as 1693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% specified by the geometry. 1703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the WritePS2Image method is: 1723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1731e178e70fb3c956f9fc1e30c3ba863e882666465cristy% MagickBooleanType WritePS2Image(const ImageInfo *image_info, 1741e178e70fb3c956f9fc1e30c3ba863e882666465cristy% Image *image,ExceptionInfo *exception) 1753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 1773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info. 1793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: the image. 1813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1821e178e70fb3c956f9fc1e30c3ba863e882666465cristy% o exception: return any errors or warnings in this structure. 1831e178e70fb3c956f9fc1e30c3ba863e882666465cristy% 1843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 18547b838c54284694d178fd59bf14baf5d9268875ccristy 18647b838c54284694d178fd59bf14baf5d9268875ccristystatic MagickBooleanType Huffman2DEncodeImage(const ImageInfo *image_info, 187018f07f7333b25743d0afff892450cebdb905c1acristy Image *image,Image *inject_image,ExceptionInfo *exception) 18847b838c54284694d178fd59bf14baf5d9268875ccristy{ 18947b838c54284694d178fd59bf14baf5d9268875ccristy Image 190809758622d7d1135d333c5394ce4edd4b4c3f150cristy *group4_image; 19147b838c54284694d178fd59bf14baf5d9268875ccristy 19247b838c54284694d178fd59bf14baf5d9268875ccristy ImageInfo 19347b838c54284694d178fd59bf14baf5d9268875ccristy *write_info; 19447b838c54284694d178fd59bf14baf5d9268875ccristy 19547b838c54284694d178fd59bf14baf5d9268875ccristy MagickBooleanType 19647b838c54284694d178fd59bf14baf5d9268875ccristy status; 19747b838c54284694d178fd59bf14baf5d9268875ccristy 198809758622d7d1135d333c5394ce4edd4b4c3f150cristy size_t 199809758622d7d1135d333c5394ce4edd4b4c3f150cristy length; 20047b838c54284694d178fd59bf14baf5d9268875ccristy 20147b838c54284694d178fd59bf14baf5d9268875ccristy unsigned char 202809758622d7d1135d333c5394ce4edd4b4c3f150cristy *group4; 20347b838c54284694d178fd59bf14baf5d9268875ccristy 20442751fe3c232b8c71613932551099cb49be2971acristy status=MagickTrue; 20547b838c54284694d178fd59bf14baf5d9268875ccristy write_info=CloneImageInfo(image_info); 206151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(write_info->filename,"GROUP4:",MagickPathExtent); 207151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(write_info->magick,"GROUP4",MagickPathExtent); 208018f07f7333b25743d0afff892450cebdb905c1acristy group4_image=CloneImage(inject_image,0,0,MagickTrue,exception); 209809758622d7d1135d333c5394ce4edd4b4c3f150cristy if (group4_image == (Image *) NULL) 210809758622d7d1135d333c5394ce4edd4b4c3f150cristy return(MagickFalse); 211809758622d7d1135d333c5394ce4edd4b4c3f150cristy group4=(unsigned char *) ImageToBlob(write_info,group4_image,&length, 212018f07f7333b25743d0afff892450cebdb905c1acristy exception); 213809758622d7d1135d333c5394ce4edd4b4c3f150cristy group4_image=DestroyImage(group4_image); 214809758622d7d1135d333c5394ce4edd4b4c3f150cristy if (group4 == (unsigned char *) NULL) 215809758622d7d1135d333c5394ce4edd4b4c3f150cristy return(MagickFalse); 21647b838c54284694d178fd59bf14baf5d9268875ccristy write_info=DestroyImageInfo(write_info); 217809758622d7d1135d333c5394ce4edd4b4c3f150cristy if (WriteBlob(image,length,group4) != (ssize_t) length) 218809758622d7d1135d333c5394ce4edd4b4c3f150cristy status=MagickFalse; 219809758622d7d1135d333c5394ce4edd4b4c3f150cristy group4=(unsigned char *) RelinquishMagickMemory(group4); 220809758622d7d1135d333c5394ce4edd4b4c3f150cristy return(status); 22147b838c54284694d178fd59bf14baf5d9268875ccristy} 22247b838c54284694d178fd59bf14baf5d9268875ccristy 2231e178e70fb3c956f9fc1e30c3ba863e882666465cristystatic MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image, 2241e178e70fb3c956f9fc1e30c3ba863e882666465cristy ExceptionInfo *exception) 2253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static const char 227629f80558ba1e82b0317a3d778deaf195c8e37e5Cristy *const PostscriptProlog[]= 2283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "%%%%BeginProlog", 2303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "%%", 2313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "%% Display a color image. The image is displayed in color on", 2323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "%% Postscript viewers or printers that support color, otherwise", 2333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "%% it is displayed as grayscale.", 2343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "%%", 2353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "/DirectClassImage", 2363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "{", 2373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %%", 2383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% Display a DirectClass image.", 2393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %%", 2403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " colorspace 0 eq", 2413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " {", 2423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /DeviceRGB setcolorspace", 2433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " <<", 2443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /ImageType 1", 2453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /Width columns", 2463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /Height rows", 2473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /BitsPerComponent 8", 2483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /Decode [0 1 0 1 0 1]", 2493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /ImageMatrix [columns 0 0 rows neg 0 rows]", 2503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " compression 0 gt", 251809758622d7d1135d333c5394ce4edd4b4c3f150cristy " { /DataSource pixel_stream %s }", 252809758622d7d1135d333c5394ce4edd4b4c3f150cristy " { /DataSource pixel_stream %s } ifelse", 2533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " >> image", 2543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " }", 2553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " {", 2563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /DeviceCMYK setcolorspace", 2573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " <<", 2583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /ImageType 1", 2593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /Width columns", 2603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /Height rows", 2613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /BitsPerComponent 8", 2623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /Decode [1 0 1 0 1 0 1 0]", 2633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /ImageMatrix [columns 0 0 rows neg 0 rows]", 2643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " compression 0 gt", 265809758622d7d1135d333c5394ce4edd4b4c3f150cristy " { /DataSource pixel_stream %s }", 266809758622d7d1135d333c5394ce4edd4b4c3f150cristy " { /DataSource pixel_stream %s } ifelse", 2673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " >> image", 2683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " } ifelse", 2693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "} bind def", 2703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "", 2713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "/PseudoClassImage", 2723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "{", 2733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %%", 2743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% Display a PseudoClass image.", 2753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %%", 2763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% Parameters:", 2773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% colors: number of colors in the colormap.", 2783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %%", 2793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " currentfile buffer readline pop", 2803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " token pop /colors exch def pop", 2813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " colors 0 eq", 2823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " {", 2833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %%", 2843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% Image is grayscale.", 2853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %%", 2863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " currentfile buffer readline pop", 2873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " token pop /bits exch def pop", 2883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /DeviceGray setcolorspace", 2893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " <<", 2903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /ImageType 1", 2913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /Width columns", 2923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /Height rows", 2933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /BitsPerComponent bits", 2943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /Decode [0 1]", 2953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /ImageMatrix [columns 0 0 rows neg 0 rows]", 2963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " compression 0 gt", 297809758622d7d1135d333c5394ce4edd4b4c3f150cristy " { /DataSource pixel_stream %s }", 2983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " {", 299809758622d7d1135d333c5394ce4edd4b4c3f150cristy " /DataSource pixel_stream %s", 3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " <<", 3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /K "CCITTParam, 3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /Columns columns", 3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /Rows rows", 3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " >> /CCITTFaxDecode filter", 3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " } ifelse", 3063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " >> image", 3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " }", 3083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " {", 3093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %%", 3103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% Parameters:", 3113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% colormap: red, green, blue color packets.", 3123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %%", 3133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /colormap colors 3 mul string def", 3143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " currentfile colormap readhexstring pop pop", 3153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " currentfile buffer readline pop", 3163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " [ /Indexed /DeviceRGB colors 1 sub colormap ] setcolorspace", 3173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " <<", 3183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /ImageType 1", 3193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /Width columns", 3203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /Height rows", 3213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /BitsPerComponent 8", 3223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /Decode [0 255]", 3233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /ImageMatrix [columns 0 0 rows neg 0 rows]", 3243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " compression 0 gt", 325809758622d7d1135d333c5394ce4edd4b4c3f150cristy " { /DataSource pixel_stream %s }", 326809758622d7d1135d333c5394ce4edd4b4c3f150cristy " { /DataSource pixel_stream %s } ifelse", 3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " >> image", 3283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " } ifelse", 3293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "} bind def", 3303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "", 3313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "/DisplayImage", 3323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "{", 3333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %%", 3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% Display a DirectClass or PseudoClass image.", 3353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %%", 3363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% Parameters:", 3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% x & y translation.", 3383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% x & y scale.", 3393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% label pointsize.", 3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% image label.", 3413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% image columns & rows.", 3423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% class: 0-DirectClass or 1-PseudoClass.", 3433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% colorspace: 0-RGB or 1-CMYK.", 3443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% compression: 0-RLECompression or 1-NoCompression.", 3453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %% hex color packets.", 3463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " %%", 3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " gsave", 3483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /buffer 512 string def", 3493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /pixel_stream currentfile def", 3503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "", 3513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " currentfile buffer readline pop", 3523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " token pop /x exch def", 3533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " token pop /y exch def pop", 3543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " x y translate", 3553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " currentfile buffer readline pop", 3563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " token pop /x exch def", 3573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " token pop /y exch def pop", 3583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " currentfile buffer readline pop", 3593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " token pop /pointsize exch def pop", 3603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " /Helvetica findfont pointsize scalefont setfont", 361629f80558ba1e82b0317a3d778deaf195c8e37e5Cristy (const char *) NULL 3623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }, 363629f80558ba1e82b0317a3d778deaf195c8e37e5Cristy *const PostscriptEpilog[]= 3643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " x y scale", 3663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " currentfile buffer readline pop", 3673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " token pop /columns exch def", 3683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " token pop /rows exch def pop", 3693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " currentfile buffer readline pop", 3703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " token pop /class exch def pop", 3713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " currentfile buffer readline pop", 3723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " token pop /colorspace exch def pop", 3733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " currentfile buffer readline pop", 3743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " token pop /compression exch def pop", 3753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy " class 0 gt { PseudoClassImage } { DirectClassImage } ifelse", 3768b4ff226f4bd96875f113eccedaa435e5486cb57cristy " grestore", 377629f80558ba1e82b0317a3d778deaf195c8e37e5Cristy (const char *) NULL 3783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 3793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 381151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy buffer[MagickPathExtent], 382151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy date[MagickPathExtent], 383151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy page_geometry[MagickPathExtent], 3843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **labels; 3853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CompressionType 3873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy compression; 3883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char 390629f80558ba1e82b0317a3d778deaf195c8e37e5Cristy *const *q, 3913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *value; 3923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy double 3943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pointsize; 3953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GeometryInfo 3973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy geometry_info; 3983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickOffsetType 4003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scene, 4013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy start, 4023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy stop; 4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 4053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy progress, 4063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 4073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickOffsetType 4093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy offset; 4103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickSizeType 4123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_pixels; 4133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickStatusType 4153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy flags; 4163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy PointInfo 4183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delta, 4193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resolution, 4203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scale; 4213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RectangleInfo 4233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy geometry, 4243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy media_info, 4253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy page_info; 4263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4274c08aed51c5899665ade97263692328eea4af106cristy register const Quantum 4283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 4293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 430bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 4313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 4323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 433bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 4343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 4353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SegmentInfo 4373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bounds; 4383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy size_t 440802d364f093d693396e7052869766dd9fbe4d94bcristy length, 441802d364f093d693396e7052869766dd9fbe4d94bcristy page, 442802d364f093d693396e7052869766dd9fbe4d94bcristy text_size; 443802d364f093d693396e7052869766dd9fbe4d94bcristy 444802d364f093d693396e7052869766dd9fbe4d94bcristy ssize_t 445802d364f093d693396e7052869766dd9fbe4d94bcristy j, 446802d364f093d693396e7052869766dd9fbe4d94bcristy y; 4473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy time_t 4493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy timer; 4503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 4523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *pixels; 4533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 4553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Open output image file. 4563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 4573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image_info != (const ImageInfo *) NULL); 458e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image_info->signature == MagickCoreSignature); 4593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image != (Image *) NULL); 460e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image->signature == MagickCoreSignature); 4613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->debug != MagickFalse) 4623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 4633a37efd7ece979e9c63dc8f2f2d3816bab8b1156cristy assert(exception != (ExceptionInfo *) NULL); 464e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(exception->signature == MagickCoreSignature); 4651e178e70fb3c956f9fc1e30c3ba863e882666465cristy status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception); 4663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 4673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(status); 468af8d391906d11f0a1f2bbf4e2adbc4995c852d33cristy compression=image->compression; 4693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image_info->compression != UndefinedCompression) 4703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy compression=image_info->compression; 4713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (compression) 4723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if !defined(MAGICKCORE_JPEG_DELEGATE) 4743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case JPEGCompression: 4753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy compression=RLECompression; 4771e178e70fb3c956f9fc1e30c3ba863e882666465cristy (void) ThrowMagickException(exception,GetMagickModule(), 4783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MissingDelegateError,"DelegateLibrarySupportNotBuiltIn","`%s' (JPEG)", 4793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image->filename); 4803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 4813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 4833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 4843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 4853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(&bounds,0,sizeof(bounds)); 4873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy page=1; 4883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scene=0; 4893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 4903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 4923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Scale relative to dots-per-inch. 4933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 4943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delta.x=DefaultResolution; 4953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delta.y=DefaultResolution; 4962a11befa48257796843468409d77bb8cfb129cdccristy resolution.x=image->resolution.x; 4972a11befa48257796843468409d77bb8cfb129cdccristy resolution.y=image->resolution.y; 4983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((resolution.x == 0.0) || (resolution.y == 0.0)) 4993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy flags=ParseGeometry(PSDensityGeometry,&geometry_info); 5013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resolution.x=geometry_info.rho; 5023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resolution.y=geometry_info.sigma; 5033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((flags & SigmaValue) == 0) 5043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resolution.y=resolution.x; 5053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image_info->density != (char *) NULL) 5073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy flags=ParseGeometry(image_info->density,&geometry_info); 5093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resolution.x=geometry_info.rho; 5103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resolution.y=geometry_info.sigma; 5113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((flags & SigmaValue) == 0) 5123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resolution.y=resolution.x; 5133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->units == PixelsPerCentimeterResolution) 5153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 516bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy resolution.x=(size_t) (100.0*2.54*resolution.x+0.5)/100.0; 517bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy resolution.y=(size_t) (100.0*2.54*resolution.y+0.5)/100.0; 5183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SetGeometry(image,&geometry); 520151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(page_geometry,MagickPathExtent,"%.20gx%.20g", 521e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy (double) image->columns,(double) image->rows); 5223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image_info->page != (char *) NULL) 523151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(page_geometry,image_info->page,MagickPathExtent); 5243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 5253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((image->page.width != 0) && (image->page.height != 0)) 526151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(page_geometry,MagickPathExtent, 527e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy "%.20gx%.20g%+.20g%+.20g",(double) image->page.width,(double) 528e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy image->page.height,(double) image->page.x,(double) image->page.y); 5293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 5303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((image->gravity != UndefinedGravity) && 5313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (LocaleCompare(image_info->magick,"PS") == 0)) 532151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(page_geometry,PSPageGeometry,MagickPathExtent); 533151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(page_geometry,">",MagickPathExtent); 5343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ParseMetaGeometry(page_geometry,&geometry.x,&geometry.y, 5353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &geometry.width,&geometry.height); 5363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scale.x=(double) (geometry.width*delta.x)/resolution.x; 537bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy geometry.width=(size_t) floor(scale.x+0.5); 5383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scale.y=(double) (geometry.height*delta.y)/resolution.y; 539bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy geometry.height=(size_t) floor(scale.y+0.5); 5403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ParseAbsoluteGeometry(page_geometry,&media_info); 5411e178e70fb3c956f9fc1e30c3ba863e882666465cristy (void) ParseGravityGeometry(image,page_geometry,&page_info,exception); 5423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->gravity != UndefinedGravity) 5433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy geometry.x=(-page_info.x); 545bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy geometry.y=(ssize_t) (media_info.height+page_info.y-image->rows); 5463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pointsize=12.0; 5483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image_info->pointsize != 0.0) 5493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pointsize=image_info->pointsize; 5503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_size=0; 551d15e65928aec551b7388c2863de3e3e628e2e0ddcristy value=GetImageProperty(image,"label",exception); 5523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (value != (const char *) NULL) 553bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy text_size=(size_t) (MultilineCensus(value)*pointsize+12); 5543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (page == 1) 5553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Output Postscript header. 5583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(image_info->magick,"PS2") == 0) 560151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(buffer,"%!PS-Adobe-3.0\n",MagickPathExtent); 5613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 5623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(buffer,"%!PS-Adobe-3.0 EPSF-3.0\n", 563151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 5643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 5653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"%%Creator: (ImageMagick)\n"); 566151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,"%%%%Title: (%s)\n", 5673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image->filename); 5683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 5693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy timer=time((time_t *) NULL); 570151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatMagickTime(timer,MagickPathExtent,date); 571151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent, 5723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "%%%%CreationDate: (%s)\n",date); 5733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 5743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bounds.x1=(double) geometry.x; 5753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bounds.y1=(double) geometry.y; 5763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bounds.x2=(double) geometry.x+geometry.width; 5773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bounds.y2=(double) geometry.y+geometry.height+text_size; 5783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((image_info->adjoin != MagickFalse) && 5793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (GetNextImageInList(image) != (Image *) NULL)) 5803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(buffer,"%%BoundingBox: (atend)\n", 581151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 5823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 5833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 584151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent, 585e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy "%%%%BoundingBox: %.20g %.20g %.20g %.20g\n",ceil(bounds.x1-0.5), 5868071c47b0ca8f471cbd6175e0f2e45739983bf4ecristy ceil(bounds.y1-0.5),floor(bounds.x2+0.5),floor(bounds.y2+0.5)); 5873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 588151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent, 589e7f5109f30fc7242d04a26174a9138483dda5b6acristy "%%%%HiResBoundingBox: %g %g %g %g\n",bounds.x1, 5908cd5b3193212b4aebce08c4e7afbb66b09778029cristy bounds.y1,bounds.x2,bounds.y2); 5913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 593d15e65928aec551b7388c2863de3e3e628e2e0ddcristy value=GetImageProperty(image,"label",exception); 5943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (value != (const char *) NULL) 5953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image, 5963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "%%DocumentNeededResources: font Helvetica\n"); 5973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"%%LanguageLevel: 2\n"); 5983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(image_info->magick,"PS2") != 0) 5993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"%%Pages: 1\n"); 6003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 6013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"%%Orientation: Portrait\n"); 6033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"%%PageOrder: Ascend\n"); 6043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image_info->adjoin == MagickFalse) 605151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(buffer,"%%Pages: 1\n",MagickPathExtent); 6063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 607151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent, 608e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy "%%%%Pages: %.20g\n",(double) GetImageListLength(image)); 6093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 6103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61157219ffb10215e3894a1ebe2035a2c97e84d2a52cristy if (image->colorspace == CMYKColorspace) 61257219ffb10215e3894a1ebe2035a2c97e84d2a52cristy (void) WriteBlobString(image, 61357219ffb10215e3894a1ebe2035a2c97e84d2a52cristy "%%DocumentProcessColors: Cyan Magenta Yellow Black\n"); 6143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"%%EndComments\n"); 6153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"\n%%BeginDefaults\n"); 6163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"%%EndDefaults\n\n"); 6173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 6183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Output Postscript commands. 6193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 6203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q=PostscriptProlog; *q; q++) 6213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (compression) 6233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case NoCompression: 6253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 626151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,*q, 627809758622d7d1135d333c5394ce4edd4b4c3f150cristy "/ASCII85Decode filter"); 6283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case JPEGCompression: 6313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 632151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,*q, 633809758622d7d1135d333c5394ce4edd4b4c3f150cristy "/DCTDecode filter"); 6343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case LZWCompression: 6373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 638151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,*q, 639809758622d7d1135d333c5394ce4edd4b4c3f150cristy "/LZWDecode filter"); 6403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case FaxCompression: 6433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case Group4Compression: 6443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 645151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,*q," "); 6463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 6493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 650151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,*q, 651809758622d7d1135d333c5394ce4edd4b4c3f150cristy "/RunLengthDecode filter"); 6523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 6563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobByte(image,'\n'); 6573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 658d15e65928aec551b7388c2863de3e3e628e2e0ddcristy value=GetImageProperty(image,"label",exception); 6593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (value != (const char *) NULL) 660bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (j=(ssize_t) MultilineCensus(value)-1; j >= 0; j--) 6613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image," /label 512 string def\n"); 6633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image," currentfile label readline pop\n"); 664151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent, 665e7f5109f30fc7242d04a26174a9138483dda5b6acristy " 0 y %g add moveto label show pop\n",j*pointsize+12); 6663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 6673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (q=PostscriptEpilog; *q; q++) 6693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 670151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,"%s\n",*q); 6713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 6723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(image_info->magick,"PS2") == 0) 6743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image," showpage\n"); 6753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"} bind def\n"); 6763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"%%EndProlog\n"); 6773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 678151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,"%%%%Page: 1 %.20g\n", 679e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy (double) page++); 6803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 681151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent, 682e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy "%%%%PageBoundingBox: %.20g %.20g %.20g %.20g\n",(double) geometry.x, 683e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy (double) geometry.y,geometry.x+(double) geometry.width,geometry.y+(double) 6843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (geometry.height+text_size)); 6853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 6863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((double) geometry.x < bounds.x1) 6873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bounds.x1=(double) geometry.x; 6883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((double) geometry.y < bounds.y1) 6893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bounds.y1=(double) geometry.y; 6903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((double) (geometry.x+geometry.width-1) > bounds.x2) 6913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bounds.x2=(double) geometry.x+geometry.width-1; 6923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((double) (geometry.y+(geometry.height+text_size)-1) > bounds.y2) 6933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bounds.y2=(double) geometry.y+(geometry.height+text_size)-1; 694d15e65928aec551b7388c2863de3e3e628e2e0ddcristy value=GetImageProperty(image,"label",exception); 6953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (value != (const char *) NULL) 6963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"%%PageResources: font Times-Roman\n"); 6973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(image_info->magick,"PS2") != 0) 6983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"userdict begin\n"); 6993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy start=TellBlob(image); 700151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent, 7013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "%%%%BeginData:%13ld %s Bytes\n",0L, 7023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy compression == NoCompression ? "ASCII" : "Binary"); 7033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 7043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy stop=TellBlob(image); 7053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"DisplayImage\n"); 7063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 7073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Output image data. 7083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 709151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,"%.20g %.20g\n%g %g\n%g\n", 710e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy (double) geometry.x,(double) geometry.y,scale.x,scale.y,pointsize); 7113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 7123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy labels=(char **) NULL; 713d15e65928aec551b7388c2863de3e3e628e2e0ddcristy value=GetImageProperty(image,"label",exception); 7143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (value != (const char *) NULL) 7153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy labels=StringToList(value); 7163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (labels != (char **) NULL) 7173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; labels[i] != (char *) NULL; i++) 7193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 720151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,"%s \n", 7213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy labels[i]); 7223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 7233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy labels[i]=DestroyString(labels[i]); 7243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy labels=(char **) RelinquishMagickMemory(labels); 7263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_pixels=(MagickSizeType) image->columns*image->rows; 7283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (number_pixels != (MagickSizeType) ((size_t) number_pixels)) 7293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowWriterException(ResourceLimitError,"MemoryAllocationFailed"); 7303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((compression == FaxCompression) || (compression == Group4Compression) || 7313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((image_info->type != TrueColorType) && 732f1d8548abecaf5ca89d453fd9fc0cde77d20672bdirk (SetImageGray(image,exception) != MagickFalse))) 7333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 734151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,"%.20g %.20g\n1\n%d\n", 735e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy (double) image->columns,(double) image->rows,(int) 7363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (image->colorspace == CMYKColorspace)); 7373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 738151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,"%d\n", 7393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) ((compression != FaxCompression) && 7403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (compression != Group4Compression))); 7413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 7423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"0\n"); 743151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,"%d\n", 7443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (compression == FaxCompression) || 7453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (compression == Group4Compression) ? 1 : 8); 7463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 7473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (compression) 7483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case FaxCompression: 7503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case Group4Compression: 7513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(CCITTParam,"0") == 0) 7533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 754018f07f7333b25743d0afff892450cebdb905c1acristy (void) HuffmanEncodeImage(image_info,image,image,exception); 7553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 7563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 757018f07f7333b25743d0afff892450cebdb905c1acristy (void) Huffman2DEncodeImage(image_info,image,image,exception); 7583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 7593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case JPEGCompression: 7613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7621e178e70fb3c956f9fc1e30c3ba863e882666465cristy status=InjectImageBlob(image_info,image,image,"jpeg",exception); 7633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 7641e178e70fb3c956f9fc1e30c3ba863e882666465cristy { 7651e178e70fb3c956f9fc1e30c3ba863e882666465cristy (void) CloseBlob(image); 7661e178e70fb3c956f9fc1e30c3ba863e882666465cristy return(MagickFalse); 7671e178e70fb3c956f9fc1e30c3ba863e882666465cristy } 7683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 7693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 7703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case RLECompression: 7713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 7723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 773b64823d5e9d6def353c863a1464867f1bf5caca5cristy MemoryInfo 774b64823d5e9d6def353c863a1464867f1bf5caca5cristy *pixel_info; 775b64823d5e9d6def353c863a1464867f1bf5caca5cristy 7763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned char 7773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 7783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 7803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate pixel array. 7813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 7823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(size_t) number_pixels; 783b64823d5e9d6def353c863a1464867f1bf5caca5cristy pixel_info=AcquireVirtualMemory(length,sizeof(*pixels)); 784b64823d5e9d6def353c863a1464867f1bf5caca5cristy if (pixel_info == (MemoryInfo *) NULL) 7853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowWriterException(ResourceLimitError,"MemoryAllocationFailed"); 786b64823d5e9d6def353c863a1464867f1bf5caca5cristy pixels=(unsigned char *) GetVirtualMemoryBlob(pixel_info); 7873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 788b64823d5e9d6def353c863a1464867f1bf5caca5cristy Dump runlength encoded pixels. 7893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 7903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=pixels; 791bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (y=0; y < (ssize_t) image->rows; y++) 7923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 7931e178e70fb3c956f9fc1e30c3ba863e882666465cristy p=GetVirtualPixels(image,0,y,image->columns,1,exception); 7944c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 7953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 796bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) image->columns; x++) 7973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 798d0323229686850da53ca53c231371ee385b055fccristy *q++=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p))); 799ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 8003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 801802d364f093d693396e7052869766dd9fbe4d94bcristy progress=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y, 802802d364f093d693396e7052869766dd9fbe4d94bcristy image->rows); 8033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (progress == MagickFalse) 8043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 8053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(size_t) (q-pixels); 8073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (compression == LZWCompression) 808018f07f7333b25743d0afff892450cebdb905c1acristy status=LZWEncodeImage(image,length,pixels,exception); 8093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 810018f07f7333b25743d0afff892450cebdb905c1acristy status=PackbitsEncodeImage(image,length,pixels,exception); 811b64823d5e9d6def353c863a1464867f1bf5caca5cristy pixel_info=RelinquishVirtualMemory(pixel_info); 8123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 8133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CloseBlob(image); 8153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 8163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 8183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case NoCompression: 8203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 8223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Dump uncompressed PseudoColor packets. 8233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 8243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Ascii85Initialize(image); 825bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (y=0; y < (ssize_t) image->rows; y++) 8263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8271e178e70fb3c956f9fc1e30c3ba863e882666465cristy p=GetVirtualPixels(image,0,y,image->columns,1,exception); 8284c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 8293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 830bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) image->columns; x++) 8313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 832d0323229686850da53ca53c231371ee385b055fccristy Ascii85Encode(image,ScaleQuantumToChar(ClampToQuantum( 833d0323229686850da53ca53c231371ee385b055fccristy GetPixelLuma(image,p)))); 834ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 8353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 836e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy progress=SetImageProgress(image,SaveImageTag,(MagickOffsetType) 837e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy y,image->rows); 8383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (progress == MagickFalse) 8393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 8403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Ascii85Flush(image); 8423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 8433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 8473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((image->storage_class == DirectClass) || (image->colors > 256) || 84817f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy (compression == JPEGCompression) || (image->alpha_trait != UndefinedPixelTrait)) 8493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 850151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,"%.20g %.20g\n0\n%d\n", 851e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy (double) image->columns,(double) image->rows,(int) 8523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (image->colorspace == CMYKColorspace)); 8533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 854151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,"%d\n", 8553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) (compression == NoCompression)); 8563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 8573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (compression) 8583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case JPEGCompression: 8603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8611e178e70fb3c956f9fc1e30c3ba863e882666465cristy status=InjectImageBlob(image_info,image,image,"jpeg",exception); 8623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 8631e178e70fb3c956f9fc1e30c3ba863e882666465cristy { 8641e178e70fb3c956f9fc1e30c3ba863e882666465cristy (void) CloseBlob(image); 8651e178e70fb3c956f9fc1e30c3ba863e882666465cristy return(MagickFalse); 8661e178e70fb3c956f9fc1e30c3ba863e882666465cristy } 8673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 8683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 8693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case RLECompression: 8703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 8713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 872b64823d5e9d6def353c863a1464867f1bf5caca5cristy MemoryInfo 873b64823d5e9d6def353c863a1464867f1bf5caca5cristy *pixel_info; 874b64823d5e9d6def353c863a1464867f1bf5caca5cristy 8753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned char 8763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 8773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 8793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate pixel array. 8803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 8813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(size_t) number_pixels; 882b64823d5e9d6def353c863a1464867f1bf5caca5cristy pixel_info=AcquireVirtualMemory(length,4*sizeof(*pixels)); 883b64823d5e9d6def353c863a1464867f1bf5caca5cristy if (pixel_info == (MemoryInfo *) NULL) 8843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowWriterException(ResourceLimitError, 8853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "MemoryAllocationFailed"); 886b64823d5e9d6def353c863a1464867f1bf5caca5cristy pixels=(unsigned char *) GetVirtualMemoryBlob(pixel_info); 8873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 888b64823d5e9d6def353c863a1464867f1bf5caca5cristy Dump runlength encoded pixels. 8893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 8903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=pixels; 891bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (y=0; y < (ssize_t) image->rows; y++) 8923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 8931e178e70fb3c956f9fc1e30c3ba863e882666465cristy p=GetVirtualPixels(image,0,y,image->columns,1,exception); 8944c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 8953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 896bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) image->columns; x++) 8973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 89817f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy if ((image->alpha_trait != UndefinedPixelTrait) && 8994c08aed51c5899665ade97263692328eea4af106cristy (GetPixelAlpha(image,p) == (Quantum) TransparentAlpha)) 9003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9016e963d8cbd0aebba1073d7f4b61e3d17177d6fedcristy *q++=ScaleQuantumToChar(QuantumRange); 9026e963d8cbd0aebba1073d7f4b61e3d17177d6fedcristy *q++=ScaleQuantumToChar(QuantumRange); 9036e963d8cbd0aebba1073d7f4b61e3d17177d6fedcristy *q++=ScaleQuantumToChar(QuantumRange); 9043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 9063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->colorspace != CMYKColorspace) 9073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9084c08aed51c5899665ade97263692328eea4af106cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 9094c08aed51c5899665ade97263692328eea4af106cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 9104c08aed51c5899665ade97263692328eea4af106cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 9113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 9133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9144c08aed51c5899665ade97263692328eea4af106cristy *q++=ScaleQuantumToChar(GetPixelRed(image,p)); 9154c08aed51c5899665ade97263692328eea4af106cristy *q++=ScaleQuantumToChar(GetPixelGreen(image,p)); 9164c08aed51c5899665ade97263692328eea4af106cristy *q++=ScaleQuantumToChar(GetPixelBlue(image,p)); 9174c08aed51c5899665ade97263692328eea4af106cristy *q++=ScaleQuantumToChar(GetPixelBlack(image,p)); 9183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 919ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 9203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 921802d364f093d693396e7052869766dd9fbe4d94bcristy progress=SetImageProgress(image,SaveImageTag,(MagickOffsetType) 922802d364f093d693396e7052869766dd9fbe4d94bcristy y,image->rows); 9233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (progress == MagickFalse) 9243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 9253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(size_t) (q-pixels); 9273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (compression == LZWCompression) 928018f07f7333b25743d0afff892450cebdb905c1acristy status=LZWEncodeImage(image,length,pixels,exception); 9293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 930018f07f7333b25743d0afff892450cebdb905c1acristy status=PackbitsEncodeImage(image,length,pixels,exception); 9313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 9323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CloseBlob(image); 9343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 9353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 936b64823d5e9d6def353c863a1464867f1bf5caca5cristy pixel_info=RelinquishVirtualMemory(pixel_info); 9373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 9383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case NoCompression: 9403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 9423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Dump uncompressed DirectColor packets. 9433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 9443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Ascii85Initialize(image); 945bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (y=0; y < (ssize_t) image->rows; y++) 9463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9471e178e70fb3c956f9fc1e30c3ba863e882666465cristy p=GetVirtualPixels(image,0,y,image->columns,1,exception); 9484c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 9493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 950bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) image->columns; x++) 9513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 95217f11b056210f082a6d0e54ac5d68e6d72fa76b2cristy if ((image->alpha_trait != UndefinedPixelTrait) && 9534c08aed51c5899665ade97263692328eea4af106cristy (GetPixelAlpha(image,p) == (Quantum) TransparentAlpha)) 9543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Ascii85Encode(image,ScaleQuantumToChar((Quantum) 9563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy QuantumRange)); 9573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Ascii85Encode(image,ScaleQuantumToChar((Quantum) 9583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy QuantumRange)); 9593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Ascii85Encode(image,ScaleQuantumToChar((Quantum) 9603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy QuantumRange)); 9613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 9633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->colorspace != CMYKColorspace) 9643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 965802d364f093d693396e7052869766dd9fbe4d94bcristy Ascii85Encode(image,ScaleQuantumToChar( 9664c08aed51c5899665ade97263692328eea4af106cristy GetPixelRed(image,p))); 967802d364f093d693396e7052869766dd9fbe4d94bcristy Ascii85Encode(image,ScaleQuantumToChar( 9684c08aed51c5899665ade97263692328eea4af106cristy GetPixelGreen(image,p))); 969802d364f093d693396e7052869766dd9fbe4d94bcristy Ascii85Encode(image,ScaleQuantumToChar( 9704c08aed51c5899665ade97263692328eea4af106cristy GetPixelBlue(image,p))); 9713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 9733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 974802d364f093d693396e7052869766dd9fbe4d94bcristy Ascii85Encode(image,ScaleQuantumToChar( 9754c08aed51c5899665ade97263692328eea4af106cristy GetPixelRed(image,p))); 976802d364f093d693396e7052869766dd9fbe4d94bcristy Ascii85Encode(image,ScaleQuantumToChar( 9774c08aed51c5899665ade97263692328eea4af106cristy GetPixelGreen(image,p))); 978802d364f093d693396e7052869766dd9fbe4d94bcristy Ascii85Encode(image,ScaleQuantumToChar( 9794c08aed51c5899665ade97263692328eea4af106cristy GetPixelBlue(image,p))); 9809fff7b4fa7d657da7bfed66239982b85c6337de9cristy Ascii85Encode(image,ScaleQuantumToChar( 9814c08aed51c5899665ade97263692328eea4af106cristy GetPixelBlack(image,p))); 9823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 983ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 9843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 985802d364f093d693396e7052869766dd9fbe4d94bcristy progress=SetImageProgress(image,SaveImageTag,(MagickOffsetType) 986802d364f093d693396e7052869766dd9fbe4d94bcristy y,image->rows); 9873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (progress == MagickFalse) 9883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 9893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Ascii85Flush(image); 9913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 9923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 9953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 9963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 9973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 9983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Dump number of colors and colormap. 9993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 1000151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,"%.20g %.20g\n1\n%d\n", 1001e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy (double) image->columns,(double) image->rows,(int) 10023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (image->colorspace == CMYKColorspace)); 10033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 1004151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,"%d\n", 10053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) (compression == NoCompression)); 10063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 1007151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,"%.20g\n",(double) 1008f2faecf9facdbbb14fcba373365f9f691a9658e0cristy image->colors); 10093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 1010bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) image->colors; i++) 10113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1012151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent,"%02X%02X%02X\n", 10133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ScaleQuantumToChar(image->colormap[i].red), 10143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ScaleQuantumToChar(image->colormap[i].green), 10153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ScaleQuantumToChar(image->colormap[i].blue)); 10163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 10173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (compression) 10193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case RLECompression: 10213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 10223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1023b64823d5e9d6def353c863a1464867f1bf5caca5cristy MemoryInfo 1024b64823d5e9d6def353c863a1464867f1bf5caca5cristy *pixel_info; 1025b64823d5e9d6def353c863a1464867f1bf5caca5cristy 10263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register unsigned char 10273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 10283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 10303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate pixel array. 10313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 10323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(size_t) number_pixels; 1033b64823d5e9d6def353c863a1464867f1bf5caca5cristy pixel_info=AcquireVirtualMemory(length,sizeof(*pixels)); 1034b64823d5e9d6def353c863a1464867f1bf5caca5cristy if (pixel_info == (MemoryInfo *) NULL) 10353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowWriterException(ResourceLimitError, 10363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "MemoryAllocationFailed"); 1037b64823d5e9d6def353c863a1464867f1bf5caca5cristy pixels=(unsigned char *) GetVirtualMemoryBlob(pixel_info); 10383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 1039b64823d5e9d6def353c863a1464867f1bf5caca5cristy Dump runlength encoded pixels. 10403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 10413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=pixels; 1042bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (y=0; y < (ssize_t) image->rows; y++) 10433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10441e178e70fb3c956f9fc1e30c3ba863e882666465cristy p=GetVirtualPixels(image,0,y,image->columns,1,exception); 10454c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 10463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 1047bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) image->columns; x++) 10484c08aed51c5899665ade97263692328eea4af106cristy { 10494c08aed51c5899665ade97263692328eea4af106cristy *q++=(unsigned char) GetPixelIndex(image,p); 1050ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 10514c08aed51c5899665ade97263692328eea4af106cristy } 1052802d364f093d693396e7052869766dd9fbe4d94bcristy progress=SetImageProgress(image,SaveImageTag,(MagickOffsetType) 1053802d364f093d693396e7052869766dd9fbe4d94bcristy y,image->rows); 10543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (progress == MagickFalse) 10553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 10563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(size_t) (q-pixels); 10583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (compression == LZWCompression) 1059018f07f7333b25743d0afff892450cebdb905c1acristy status=LZWEncodeImage(image,length,pixels,exception); 10603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 1061018f07f7333b25743d0afff892450cebdb905c1acristy status=PackbitsEncodeImage(image,length,pixels,exception); 1062b64823d5e9d6def353c863a1464867f1bf5caca5cristy pixel_info=RelinquishVirtualMemory(pixel_info); 10633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 10643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CloseBlob(image); 10663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 10673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 10693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case NoCompression: 10713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 10733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Dump uncompressed PseudoColor packets. 10743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 10753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Ascii85Initialize(image); 1076bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (y=0; y < (ssize_t) image->rows; y++) 10773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10781e178e70fb3c956f9fc1e30c3ba863e882666465cristy p=GetVirtualPixels(image,0,y,image->columns,1,exception); 10794c08aed51c5899665ade97263692328eea4af106cristy if (p == (const Quantum *) NULL) 10803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 1081bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) image->columns; x++) 10824c08aed51c5899665ade97263692328eea4af106cristy { 10834c08aed51c5899665ade97263692328eea4af106cristy Ascii85Encode(image,(unsigned char) GetPixelIndex(image,p)); 1084ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy p+=GetPixelChannels(image); 10854c08aed51c5899665ade97263692328eea4af106cristy } 1086802d364f093d693396e7052869766dd9fbe4d94bcristy progress=SetImageProgress(image,SaveImageTag,(MagickOffsetType) 1087802d364f093d693396e7052869766dd9fbe4d94bcristy y,image->rows); 10883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (progress == MagickFalse) 10893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 10903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Ascii85Flush(image); 10923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 10933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobByte(image,'\n'); 10973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=(size_t) (TellBlob(image)-stop); 10983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy stop=TellBlob(image); 10993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy offset=SeekBlob(image,start,SEEK_SET); 11003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (offset < 0) 11013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowWriterException(CorruptImageError,"ImproperImageHeader"); 1102151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent, 1103f2faecf9facdbbb14fcba373365f9f691a9658e0cristy "%%%%BeginData:%13ld %s Bytes\n",(long) length, 11043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy compression == NoCompression ? "ASCII" : "Binary"); 11053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 11063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy offset=SeekBlob(image,stop,SEEK_SET); 11073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"%%EndData\n"); 11083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(image_info->magick,"PS2") != 0) 11093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"end\n"); 11103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"%%PageTrailer\n"); 11113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (GetNextImageInList(image) == (Image *) NULL) 11123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image=SyncNextImageInList(image); 11143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=SetImageProgress(image,SaveImagesTag,scene++, 11153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GetImageListLength(image)); 11163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status == MagickFalse) 11173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } while (image_info->adjoin != MagickFalse); 11193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"%%Trailer\n"); 11203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (page > 1) 11213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1122151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent, 1123e8c25f9b4c9fb72cad6db08eeda58c7c5784014ecristy "%%%%BoundingBox: %.20g %.20g %.20g %.20g\n",ceil(bounds.x1-0.5), 11248071c47b0ca8f471cbd6175e0f2e45739983bf4ecristy ceil(bounds.y1-0.5),floor(bounds.x2+0.5),floor(bounds.y2+0.5)); 11253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 1126151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(buffer,MagickPathExtent, 1127e7f5109f30fc7242d04a26174a9138483dda5b6acristy "%%%%HiResBoundingBox: %g %g %g %g\n",bounds.x1,bounds.y1, 11288cd5b3193212b4aebce08c4e7afbb66b09778029cristy bounds.x2,bounds.y2); 11293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,buffer); 11303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) WriteBlobString(image,"%%EOF\n"); 11323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CloseBlob(image); 11333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 11343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1135