See the main README file for basic instructions on compiling and running
the programs.  See http://www.libpng.org/pub/png/pngbook.html for further
information and links to the source code, and Chapters 13-15 of the book
for detailed discussion of the three programs.

Since the two viewers, rpng and rpng2, are both designed to write infor-
mation to the console (i.e., a DOS-window command line) while displaying
the image in a graphical window--and since I haven't yet figured out how
to do that under Windows--here are the usage screens for the two programs:


rpng-win 1.02 of 19 March 2000:  Simple PNG Viewer for Windows
   Compiled with libpng 1.0.5; using libpng 1.0.5.
   Compiled with zlib 1.1.3; using zlib 1.1.3.

Usage:  rpng-win [-gamma exp] [-bgcolor bg] file.png
    exp 	transfer-function exponent (``gamma'') of the display
		  system in floating-point format (e.g., ``2.2''); equal
		  to the product of the lookup-table exponent (varies)
		  and the CRT exponent (usually 2.2); must be positive
    bg  	desired background color in 7-character hex RGB format
		  (e.g., ``#ff7f00'' for orange:  same as HTML colors);
		  used with transparent images

Press Q, Esc or mouse button 1 after image is displayed to quit.


rpng2-win 1.04 of 19 March 2000:  Progressive PNG Viewer for Windows
   Compiled with libpng 1.0.5; using libpng 1.0.5.
   Compiled with zlib 1.1.3; using zlib 1.1.3.

Usage:  rpng2-win [-gamma exp] [-bgcolor bg | -bgpat pat] [-timing] file.png

    exp 	transfer-function exponent (``gamma'') of the display
		  system in floating-point format (e.g., ``2.2''); equal
		  to the product of the lookup-table exponent (varies)
		  and the CRT exponent (usually 2.2); must be positive
    bg  	desired background color in 7-character hex RGB format
		  (e.g., ``#ff7f00'' for orange:  same as HTML colors);
		  used with transparent images; overrides -bgpat
    pat 	desired background pattern number (1-16); used with
		  transparent images; overrides -bgcolor
    -timing	enables delay for every block read, to simulate modem
		  download of image (~36 Kbps)

Press Q, Esc or mouse button 1 after image is displayed to quit.


The usage screen for the third (non-windowed) program, wpng, can be seen
simply by invoking it without any parameters (``wpng'').

Greg Roelofs
19 March 2000
