1 =========================== 2 PNG: The Definitive Guide 3 =========================== 4 5 Source Code 6 7Chapters 13, 14 and 15 of "PNG: The Definitive Guide" discuss three free, 8cross-platform demo programs that show how to use the libpng reference 9library: rpng, rpng2 and wpng. rpng and rpng2 are viewers; the first is 10a very simple example that that shows how a standard file-viewer might use 11libpng, while the second is designed to process streaming data and shows 12how a web browser might be written. wpng is a simple command-line program 13that reads binary PGM and PPM files (the ``raw'' grayscale and RGB subsets 14of PBMPLUS/NetPBM) and converts them to PNG. 15 16The source code for all three demo programs currently compiles under 17Unix, OpenVMS, and 32-bit Windows. (Special thanks to Martin Zinser, 18zinser at decus.de, for making the necessary changes for OpenVMS and for 19providing an appropriate build script.) Build instructions can be found 20below. 21 22Files: 23 24 README this file 25 LICENSE terms of distribution and reuse (BSD-like or GNU GPL) 26 COPYING GNU General Public License (GPL) 27 28 Makefile.unx Unix makefile 29 Makefile.w32 Windows (MSVC) makefile 30 makevms.com OpenVMS build script 31 32 rpng-win.c Windows front end for the basic viewer 33 rpng-x.c X Window System (Unix, OpenVMS) front end 34 readpng.c generic back end for the basic viewer 35 readpng.h header file for the basic viewer 36 37 rpng2-win.c Windows front end for the progressive viewer 38 rpng2-x.c X front end for the progressive viewer 39 readpng2.c generic back end for the progressive viewer 40 readpng2.h header file for the progressive viewer 41 42 wpng.c generic (text) front end for the converter 43 writepng.c generic back end for the converter 44 writepng.h header file for the converter 45 46 toucan.png transparent PNG for testing (by Stefan Schneider) 47 48Note that, although the programs are designed to be functional, their 49primary purpose is to illustrate how to use libpng to add PNG support to 50other programs. As such, their user interfaces are crude and definitely 51are not intended for everyday use. 52 53Please see http://www.libpng.org/pub/png/pngbook.html for further infor- 54mation and links to the latest version of the source code, and Chapters 5513-15 of the book for detailed discussion of the three programs. 56 57Greg Roelofs 58https://pobox.com/~newt/greg_contact.html 5916 March 2008 60 61 62BUILD INSTRUCTIONS 63 64 - Prerequisites (in order of compilation): 65 66 - zlib https://zlib.net/ 67 - libpng http://www.libpng.org/pub/png/libpng.html 68 - pngbook http://www.libpng.org/pub/png/book/sources.html 69 70 The pngbook demo programs are explicitly designed to demonstrate proper 71 coding techniques for using the libpng reference library. As a result, 72 you need to download and build both zlib (on which libpng depends) and 73 libpng. A common build setup is to place the zlib, libpng and pngbook 74 subdirectory trees ("folders") in the same parent directory. Then the 75 libpng build can refer to files in ../zlib (or ..\zlib or [-.zlib]), 76 and similarly for the pngbook build. 77 78 Note that all three packages are designed to be built from a command 79 line by default; those who wish to use a graphical or other integrated 80 development environments are on their own. 81 82 83 - Unix: 84 85 Unpack the latest pngbook sources (which should correspond to this 86 README file) into a directory and change into that directory. 87 88 Copy Makefile.unx to Makefile and edit the PNG* and Z* variables 89 appropriately (possibly also the X* variables if necessary). 90 91 make 92 93 There is no "install" target, so copy the three executables somewhere 94 in your path or run them from the current directory. All three will 95 print a basic usage screen when run without any command-line arguments; 96 see the book for more details. 97 98 99 - Windows: 100 101 Unpack the latest pngbook sources (which should correspond to this 102 README file) into a folder, open a "DOS shell" or "command prompt" 103 or equivalent command-line window, and cd into the folder where you 104 unpacked the source code. 105 106 For MSVC, set up the necessary environment variables by invoking 107 108 %devstudio%\vc\bin\vcvars32.bat 109 110 where where %devstudio% is the installation directory for MSVC / 111 DevStudio. If you get "environment out of space" errors under 95/98, 112 create a desktop shortcut with "c:\windows\command.com /e:4096" as 113 the program command line and set the working directory to the pngbook 114 directory. Then double-click to open the new DOS-prompt window with 115 a bigger environment and retry the commands above. 116 117 Copy Makefile.w32 to Makefile and edit the PNGPATH and ZPATH variables 118 appropriately (possibly also the "INC" and "LIB" variables if needed). 119 Note that the names of the dynamic and static libpng and zlib libraries 120 used in the makefile may change in later releases of the libraries. 121 Also note that, as of libpng version 1.0.5, MSVC DLL builds do not work. 122 This makefile therefore builds statically linked executables, but if 123 the DLL problems ever get fixed, uncommenting the appropriate PNGLIB 124 and ZLIB lines will build dynamically linked executables instead. 125 126 Do the build by typing 127 128 nmake 129 130 The result should be three executables: rpng-win.exe, rpng2-win.exe, 131 and wpng.exe. Copy them somewhere in your PATH or run them from the 132 current folder. Like the Unix versions, the two windowed programs 133 (rpng and rpng2) now display a usage screen in a console window when 134 invoked without command-line arguments; this is new behavior as of 135 the June 2001 release. Note that the programs use the Unix-style "-" 136 character to specify options, instead of the more common DOS/Windows 137 "/" character. (For example: "rpng2-win -bgpat 4 foo.png", not 138 "rpng2-win /bgpat 4 foo.png") 139 140 141 - OpenVMS: 142 143 Unpack the pngbook sources into a subdirectory and change into that 144 subdirectory. 145 146 Edit makevms.com appropriately, specifically the zpath and pngpath 147 variables. 148 149 @makevms 150 151 To run the programs, they probably first need to be set up as "foreign 152 symbols," with "disk" and "dir" set appropriately: 153 154 $ rpng == "$disk:[dir]rpng-x.exe" 155 $ rpng2 == "$disk:[dir]rpng2-x.exe" 156 $ wpng == "$disk:[dir]wpng.exe" 157 158 All three will print a basic usage screen when run without any command- 159 line arguments; see the book for more details. Note that the options 160 style is Unix-like, i.e., preceded by "-" rather than "/". 161 162 163RUNNING THE PROGRAMS: (VERY) BRIEF INTRO 164 165 rpng is a simple PNG viewer that can display transparent PNGs with a 166 specified background color; for example, 167 168 rpng -bgcolor \#ff0000 toucan.png 169 170 would display the image with a red background. rpng2 is a progressive 171 viewer that simulates a web browser in some respects; it can display 172 images against either a background color or a dynamically generated 173 background image. For example: 174 175 rpng2 -bgpat 16 toucan.png 176 177 wpng is a purely command-line image converter from binary PBMPLUS/NetPBM 178 format (.pgm or .ppm) to PNG; for example, 179 180 wpng -time < toucan-notrans.ppm > toucan-notrans.png 181 182 would convert the specified PPM file (using redirection) to PNG, auto- 183 matically setting the PNG modification-time chunk. 184 185 All options can be abbreviated to the shortest unique value; for example, 186 "-bgc" for -bgcolor (versus "-bgp" for -bgpat), or "-g" for -gamma. 187