TODO - list of things to do for libpng:
Final bug fixes.
-Fix problem with C++ and EXTERN "C".
+Improve API by hiding the png_struct and png_info structs.
+Finish work on the no-floating-point version (including gamma compensation)
Better C++ wrapper/full C++ implementation?
-Keep up with public chunks.
-sPLT chunk handling.
+Fix problem with C++ and EXTERN "C".
cHRM transformation.
-Support for application-defined chunk handlers.
Improve setjmp/longjmp usage or remove it in favor of returning error codes.
-High-level API for reading images.
Add "grayscale->palette" transformation and "palette->grayscale" detection.
-Color to gray transformation.
Improved dithering.
Multi-lingual error and warning message support.
Complete sRGB transformation (presently it simply uses gamma=0.45455).
Better documentation.
Better filter selection
(counting huffman bits/precompression? filter inertia? filter costs?).
-Optional palette (sPLT) creation.
Histogram creation.
Text conversion between different code pages (Latin-1 -> Mac and DOS).
-Improve API by hiding the info_ptr.
+Should we always malloc 2^bit_depth PLTE/tRNS/hIST entries for safety?
+Build gamma tables using fixed point (and do away with floating point entirely).
+Use greater precision when changing to linear gamma for compositing against
+ background and doing rgb-to-gray transformation.
+Investigate pre-incremented loop counters and other loop constructions.