home *** CD-ROM | disk | FTP | other *** search
- % Copyright (C) 1990, 1991 Aladdin Enterprises. All rights reserved.
- % Distributed by Free Software Foundation, Inc.
- %
- % This file is part of Ghostscript.
- %
- % Ghostscript is distributed in the hope that it will be useful, but
- % WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
- % to anyone for the consequences of using it or for whether it serves any
- % particular purpose or works at all, unless he says so in writing. Refer
- % to the Ghostscript General Public License for full details.
- %
- % Everyone is granted permission to copy, modify and redistribute
- % Ghostscript, but only under the conditions described in the Ghostscript
- % General Public License. A copy of this license is supposed to have been
- % given to you along with Ghostscript so you can know your rights and
- % responsibilities. It should be in a file named COPYING. Among other
- % things, the copyright notice and this notice must be preserved on all
- % copies.
-
- % Convert a .ps file to another .ps file containing only a bit image.
- % Usage:
- % (filename) ps2image
- % This replaces the current device, writing the output on the file
- % instead of to the device. To display the image at a later time,
- % simply run the file that was written.
-
- % Initialize, and redefine copypage and showpage.
- /ps2idict 25 dict def
- ps2idict begin
- % Save the showpage operator
- /realshowpage /showpage load def
- % Define a monochrome palette
- /monopalette [ 0 0 0 rgbcolor 1 1 1 rgbcolor ] def
- % The main procedure
- /ps2image
- { % Open the file
- (w) file /myfile exch def
- myfile (/readimage ) writestring
- myfile /readimage load write==only
- myfile ( bind def\n) writestring
- % Get the device parameters
- currentdevice matrix deviceparams
- /devheight exch def
- /devwidth exch def
- /devmatrix exch def
- cleartomark
- % Make a corresponding memory device
- devmatrix devwidth devheight monopalette
- makeimagedevice
- /mydevice exch def
- mydevice setdevice % (does an erasepage)
- /row devwidth 7 add 8 idiv string def
- /prevrow row length string def
- % Replace the definition of showpage
- userdict /showpage { ps2idict begin myshowpage end } bind put
- } def
- % Procedure for reading and displaying
- % the rendered image.
- % <width> <height> readimage
- /readimage
- { gsave matrix setmatrix
- 1 matrix
- 3 index 7 add 8 idiv string currentfile exch
- % At each iteration of the loop,
- % the stack contains <file> <buffer>
- { 2 copy
- 1 index token pop % starting index
- 2 index token pop % count
- getinterval
- readhexstring pop pop dup }
- 3 1 roll
- 7 2 roll
- image pop pop
- grestore showpage
- } def
- % Write the image on the file
- /myshowpage
- { myfile devwidth write==only myfile ( ) writestring
- myfile devheight write==only myfile ( readimage\n) writestring
- 0 1 prevrow length 1 sub { prevrow exch 0 put } for
- % Write the hex data
- 0 1 devheight 1 sub
- { mydevice exch row copyscanlines
- 0 row length 1 sub -1 0
- { dup dup prevrow exch get exch row exch get
- ne { 1 add exch pop exit } { pop } ifelse
- } for
- dup dup 0 exch 1 exch 1 sub
- { dup dup prevrow exch get exch row exch get
- ne { exch pop exit } { pop } ifelse
- } for
- % stack now has stop index, start index
- exch 1 index sub 2 copy exch % start, length, length, start
- myfile exch write==only myfile ( ) writestring
- myfile exch write==only myfile ( ) writestring
- getinterval myfile exch writehexstring
- row prevrow copy pop
- myfile (\n) writestring
- } for
- myfile flushfile
- erasepage initgraphics
- } bind def
-
- end
-
- /ps2image { ps2idict begin ps2image end } bind def
-