home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Acorn User 10
/
AU_CD10.iso
/
Updates
/
GhostScript
/
!GhostScr
/
6_01
/
lib
/
viewmiff.ps
< prev
next >
Wrap
Text File
|
2000-03-09
|
4KB
|
127 lines
% Copyright (C) 1998 Aladdin Enterprises. All rights reserved.
%
% This file is part of Aladdin Ghostscript.
%
% Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND. No author
% or distributor accepts any responsibility for the consequences of using it,
% or for whether it serves any particular purpose or works at all, unless he
% or she says so in writing. Refer to the Aladdin Ghostscript Free Public
% License (the "License") for full details.
%
% Every copy of Aladdin Ghostscript must include a copy of the License,
% normally in a plain ASCII text file named PUBLIC. The License grants you
% the right to copy, modify and redistribute Aladdin Ghostscript, but only
% under certain conditions described in the License. Among other things, the
% License requires that the copyright notice and this notice be preserved on
% all copies.
% $Id: viewmiff.ps,v 1.1 2000/03/09 08:40:40 lpd Exp $
% viewmiff.ps
% Display a MIFF file. You would think the 'display' command would do this,
% but many versions of 'display' either core-dump or require unacceptably
% large amounts of memory.
% Recognize MIFF keywords.
/miffwords mark
/class { cvn /class exch def }
/colors { cvi /colors exch def }
/columns { cvi /Width exch def }
/compression { cvn /compression exch def }
/depth { cvi /depth exch def }
/packets { cvi /packets exch def }
/rows { cvi /Height exch def }
.dicttomark readonly def
% Recognize MIFF image classes.
/miffclasses mark
/DirectClass {
/DeviceRGB setcolorspace
/BitsPerComponent depth def
/Decode [ 0 1 0 1 0 1 ] def
}
/PseudoClass {
[ /Indexed
% The MIFF documentation lies about the size of pixels
% for this case: the pixel size is determined only by
% the number of colors, and is not affected by the image
% depth. Specifically, if there are 256 or fewer colors
% but the depth (of color map entries) is 16, each pixel
% is still only 1 byte, not 2.
currentdict /colors known {
/DeviceRGB colors 1 sub
/BitsPerComponent colors 256 le { 8 } { 16 } ifelse def
colors 3 mul string depth 8 eq {
f exch readstring pop
} {
% 16-bit color map entries: take only the high-order byte.
0 1 2 index length 1 sub {
f read pop 2 index 3 1 roll put f read pop pop
} for
} ifelse
} {
/colors 256 def
/DeviceGray 255
256 string 0 1 255 { 1 index exch dup put } for
} ifelse
] setcolorspace
/Decode [ 0 1 BitsPerComponent bitshift 1 sub ] def
}
.dicttomark readonly def
% Recognize MIFF compression methods.
/rlstring 768 string def
/rlread {
% packets is not reliable -- disregard it.
dup rlstring 0 3 getinterval readstring {
pop read pop 3 mul 3 3 2 index {
rlstring exch rlstring 0 3 getinterval putinterval
} for
rlstring 0 3 -1 roll 3 add getinterval
} {
pop pop ()
} ifelse
} bind def
/miffcompress mark
/Uncompressed { f }
/RunLengthEncoded { { f rlread } }
/Zip { [ f /FlateDecode filter cvlit /rlread cvx ] cvx }
.dicttomark readonly def
% Read a MIFF file and display the image.
/viewmiff { % <filename> viewmiff -
50 dict begin
/fname 1 index def
/f exch (r) file def
% Set defaults.
/ImageType 1 def
/class /DirectClass def
/compression /Uncompressed def
/depth 8 def
/packets 16#7fffffff def
% Read and parse the header.
{ f token pop
dup (:) eq { pop exit } if
dup type /nametype eq {
.namestring (=) search {
exch pop miffwords exch .knownget { exec } { pop } ifelse
} {
pop % who knows?
} ifelse
} {
pop % probably a comment in braces
} ifelse
} loop
% Read and display the image.
miffclasses class get exec
/DataSource miffcompress compression get exec def
/ImageMatrix [Width 0 0 Height neg 0 Height] def
currentpagedevice /PageSize get
dup 0 get exch 1 get scale
gsave 0.8 setgray 0 0 1 1 rectfill grestore % provide background
currentdict image
showpage
% Clean up.
f closefile
end
} bind def