README for libpng version 1.2.8 - December 3, 2004 (shared library 12.0)
See the note about version numbers near the top of png.h

See INSTALL for instructions on how to install libpng.

Libpng comes in several distribution formats.  Get libpng-*.tar.gz
or libpng-*.tar.bz2 if you want UNIX-style line endings in the text
files, or lpng*.zip if you want DOS-style line endings.

Version 0.89 was the first official release of libpng.  Don't let the
fact that it's the first release fool you.  The libpng library has been in
extensive use and testing since mid-1995.  By late 1997 it had
finally gotten to the stage where there hadn't been significant
changes to the API in some time, and people have a bad feeling about
libraries with versions < 1.0.  Version 1.0.0 was released in
March 1998.

****
Note that some of the changes to the png_info structure render this
version of the library binary incompatible with libpng-0.89 or
earlier versions if you are using a shared library.  The type of the
"filler" parameter for png_set_filler() has changed from png_byte to
png_uint_32, which will affect shared-library applications that use
this function.

To avoid problems with changes to the internals of png_info_struct,
new APIs have been made available in 0.95 to avoid direct application
access to info_ptr.  These functions are the png_set_<chunk> and
png_get_<chunk> functions.  These functions should be used when
accessing/storing the info_struct data, rather than manipulating it
directly, to avoid such problems in the future.

It is important to note that the APIs do not make current programs
that access the info struct directly incompatible with the new
library.  However, it is strongly suggested that new programs use
the new APIs (as shown in example.c and pngtest.c), and older programs
be converted to the new format, to facilitate upgrades in the future.
****

Additions since 0.90 include the ability to compile libpng as a
Windows DLL, and new APIs for accessing data in the info struct.
Experimental functions include the ability to set weighting and cost
factors for row filter selection, direct reads of integers from buffers
on big-endian processors that support misaligned data access, faster
methods of doing alpha composition, and more accurate 16->8 bit color
conversion.

The additions since 0.89 include the ability to read from a PNG stream
which has had some (or all) of the signature bytes read by the calling
application.  This also allows the reading of embedded PNG streams that
do not have the PNG file signature.  As well, it is now possible to set
the library action on the detection of chunk CRC errors.  It is possible
to set different actions based on whether the CRC error occurred in a
critical or an ancillary chunk.

The changes made to the library, and bugs fixed are based on discussions
on the PNG-implement mailing list
and not on material submitted privately to Guy, Andreas, or Glenn.  They will
forward any good suggestions to the list.

For a detailed description on using libpng, read libpng.txt.  For
examples of libpng in a program, see example.c and pngtest.c.  For usage
information and restrictions (what little they are) on libpng, see
png.h.  For a description on using zlib (the compression library used by
libpng) and zlib's restrictions, see zlib.h

I have included a general makefile, as well as several machine and
compiler specific ones, but you may have to modify one for your own needs.

You should use zlib 1.0.4 or later to run this, but it MAY work with
versions as old as zlib 0.95.  Even so, there are bugs in older zlib
versions which can cause the output of invalid compression streams for
some images.  You will definitely need zlib 1.0.4 or later if you are
taking advantage of the MS-DOS "far" structure allocation for the small
and medium memory models.  You should also note that zlib is a
compression library that is useful for more things than just PNG files.
You can use zlib as a drop-in replacement for fread() and fwrite() if
you are so inclined.

zlib should be available at the same place that libpng is, or at.
ftp://ftp.info-zip.org/pub/infozip/zlib

You may also want a copy of the PNG specification.  It is available
as an RFC, a W3C Recommendation, and an ISO/IEC Standard.  You can find
these at http://www.libpng.org/pub/png/documents/

This code is currently being archived at libpng.sf.net in the
[DOWNLOAD] area, and on CompuServe, Lib 20 (PNG SUPPORT)
at GO GRAPHSUP.  If you can't find it in any of those places,
e-mail me, and I'll help you find it.

If you have any code changes, requests, problems, etc., please e-mail
them to me.  Also, I'd appreciate any make files or project files,
and any modifications you needed to make to get libpng to compile,
along with a #define variable to tell what compiler/system you are on.
If you needed to add transformations to libpng, or wish libpng would
provide the image in a different way, drop me a note (and code, if
possible), so I can consider supporting the transformation.
Finally, if you get any warning messages when compiling libpng
(note: not zlib), and they are easy to fix, I'd appreciate the
fix.  Please mention "libpng" somewhere in the subject line.  Thanks.

This release was created and will be supported by myself (of course
based in a large way on Guy's and Andreas' earlier work), and the PNG group.

glennrp at users.sourceforge.net
png-implement at ccrc.wustl.edu (subscription required; write to
majordomo at ccrc.wustl.edu with "subscribe png-implement" in the message).

You can't reach Guy, the original libpng author, at the addresses
given in previous versions of this document.  He and Andreas will read mail
addressed to the png-implement list, however.

Please do not send general questions about PNG.  Send them to
the (png-list at ccrc.wustl.edu, subscription required, write to
majordomo at ccrc.wustl.edu with "subscribe png-list" in your message).
On the other hand,
please do not send libpng questions to that address, send them to me
or to the png-implement list.  I'll
get them in the end anyway.  If you have a question about something
in the PNG specification that is related to using libpng, send it
to me.  Send me any questions that start with "I was using libpng,
and ...".  If in doubt, send questions to me.  I'll bounce them
to others, if necessary.

Please do not send suggestions on how to change PNG.  We have
been discussing PNG for nine years now, and it is official and
finished.  If you have suggestions for libpng, however, I'll
gladly listen.  Even if your suggestion is not used immediately,
it may be used later.

Files in this distribution:

      ANNOUNCE      =>  Announcement of this version, with recent changes
      CHANGES       =>  Description of changes between libpng versions
      KNOWNBUG      =>  List of known bugs and deficiencies
      LICENSE       =>  License to use and redistribute libpng
      README        =>  This file
      TODO          =>  Things not implemented in the current library
      Y2KINFO       =>  Statement of Y2K compliance
      example.c     =>  Example code for using libpng functions
      libpng.3      =>  manual page for libpng (includes libpng.txt)
      libpng.txt    =>  Description of libpng and its functions
      libpngpf.3    =>  manual page for libpng's private functions
      png.5         =>  manual page for the PNG format
      png.c         =>  Basic interface functions common to library
      png.h         =>  Library function and interface declarations
      pngconf.h     =>  System specific library configuration
      pngasmrd.h    =>  Header file for assembler-coded functions
      pngerror.c    =>  Error/warning message I/O functions
      pngget.c      =>  Functions for retrieving info from struct
      pngmem.c      =>  Memory handling functions
      pngbar.png    =>  PNG logo, 88x31
      pngnow.png    =>  PNG logo, 98x31
      pngpread.c    =>  Progressive reading functions
      pngread.c     =>  Read data/helper high-level functions
      pngrio.c      =>  Lowest-level data read I/O functions
      pngrtran.c    =>  Read data transformation functions
      pngrutil.c    =>  Read data utility functions
      pngset.c      =>  Functions for storing data into the info_struct
      pngtest.c     =>  Library test program
      pngtest.png   =>  Library test sample image
      pngtrans.c    =>  Common data transformation functions
      pngwio.c      =>  Lowest-level write I/O functions
      pngwrite.c    =>  High-level write functions
      pngwtran.c    =>  Write data transformations
      pngwutil.c    =>  Write utility functions
      contrib       =>  Contributions
       gregbook         =>  source code for PNG reading and writing, from
                            Greg Roelofs' "PNG: The Definitive Guide",
                            O'Reilly, 1999
       msvctest     =>  Builds and runs pngtest using a MSVC workspace
       pngminus     =>  Simple pnm2png and png2pnm programs
       pngsuite     =>  Test images
       visupng      =>  Contains a MSVC workspace for VisualPng
      projects      =>  Contains project files and workspaces for building DLL
       beos             =>  Contains a Beos workspace for building libpng
       c5builder        =>  Contains a Borland workspace for building libpng
                            and zlib
       visualc6         =>  Contains a Microsoft Visual C++ (MSVC) workspace
                            for building libpng and zlib
       netware.txt      =>  Contains instructions for downloading a set of
                            project files for building libpng and zlib on
                            Netware.
       wince.txt        =>  Contains instructions for downloading a Microsoft
                            Visual C++ (Windows CD Toolkit) workspace for
                            building libpng and zlib on WindowsCE
      scripts       =>  Directory containing scripts for building libpng:
       descrip.mms      =>  VMS makefile for MMS or MMK
       makefile.std     =>  Generic UNIX makefile (cc, creates static libpng.a)
       makefile.elf     =>  Linux/ELF makefile symbol versioning,
                            gcc, creates libpng12.so.0.1.2.8)
       makefile.linux   =>  Linux/ELF makefile
                            (gcc, creates libpng12.so.0.1.2.8)
       makefile.gcmmx   =>  Linux/ELF makefile
                            (gcc, creates libpng12.so.0.1.2.8,
                            uses assembler code tuned for Intel MMX platform)
       makefile.gcc     =>  Generic makefile (gcc, creates static libpng.a)
       makefile.knr     =>  Archaic UNIX Makefile that converts files with
                            ansi2knr (Requires ansi2knr.c from
                            ftp://ftp.cs.wisc.edu/ghost)
       makefile.aix     =>  AIX makefile
       makefile.cygwin  =>  Cygwin/gcc makefile
       makefile.darwin  =>  Darwin makefile
       makefile.dec     =>  DEC Alpha UNIX makefile
       makefile.freebsd =>  FreeBSD makefile
       makefile.hpgcc   =>  HPUX makefile using gcc
       makefile.hpux    =>  HPUX (10.20 and 11.00) makefile
       makefile.hp64    =>  HPUX (10.20 and 11.00) makefile, 64 bit
       makefile.ibmc    =>  IBM C/C++ version 3.x for Win32 and OS/2 (static)
       makefile.intel   =>  Intel C/C++ version 4.0 and later
       libpng.icc       =>  Project file, IBM VisualAge/C++ 4.0 or later
       makefile.netbsd  =>  NetBSD/cc makefile, PNGGCCRD, makes libpng.so.
       makefile.ne12bsd  =>  NetBSD/cc makefile, PNGGCCRD, makes libpng12.so
       makefile.openbsd =>  OpenBSD makefile
       makefile.sgi     =>  Silicon Graphics IRIX (cc, creates static lib)
       makefile.sggcc   =>  Silicon Graphics
                            (gcc, creates libpng12.so.0.1.2.8)
       makefile.sunos   =>  Sun makefile
       makefile.solaris =>  Solaris 2.X makefile
                            (gcc, creates libpng12.so.0.1.2.8)
       makefile.so9     =>  Solaris 9 makefile
                            (gcc, creates libpng12.so.0.1.2.8)
       makefile.32sunu  =>  Sun Ultra 32-bit makefile
       makefile.64sunu  =>  Sun Ultra 64-bit makefile
       makefile.sco     =>  For SCO OSr5  ELF and Unixware 7 with Native cc
       makefile.mips    =>  MIPS makefile
       makefile.acorn   =>  Acorn makefile
       makefile.amiga   =>  Amiga makefile
       smakefile.ppc    =>  AMIGA smakefile for SAS C V6.58/7.00 PPC
                            compiler (Requires SCOPTIONS, copied from
                            scripts/SCOPTIONS.ppc)
       makefile.atari   =>  Atari makefile
       makefile.beos    =>  BEOS makefile for X86
       makefile.bor     =>  Borland makefile (uses bcc)
       makefile.bc32    =>  32-bit Borland C++ (all modules compiled in C mode)
       makefile.tc3     =>  Turbo C 3.0 makefile
       makefile.dj2     =>  DJGPP 2 makefile
       makefile.msc     =>  Microsoft C makefile
       makefile.vcawin32=>  makefile for Microsoft Visual C++ 5.0 and
                            later (uses assembler code tuned for Intel MMX
                            platform)
       makefile.vcwin32 =>  makefile for Microsoft Visual C++ 4.0 and
                            later (does not use assembler code)
       makefile.os2     =>  OS/2 Makefile (gcc and emx, requires pngos2.def)
       pngos2.def       =>  OS/2 module definition file used by makefile.os2
       makefile.watcom  =>  Watcom 10a+ Makefile, 32-bit flat memory model
       makevms.com      =>  VMS build script
       SCOPTIONS.ppc    =>  Used with smakefile.ppc

Good luck, and happy coding.

-Glenn Randers-Pehrson (current maintainer)
 Internet: glennrp at users.sourceforge.net

-Andreas Eric Dilger (former maintainer, 1996-1997)
 Internet: adilger at enel.ucalgary.ca
 Web: http://www-mddsp.enel.ucalgary.ca/People/adilger/

-Guy Eric Schalnat (original author and former maintainer, 1995-1996)
 (formerly of Group 42, Inc)
 Internet: gschal at infinet.com
