Limitations of jpegxx and pngxx
pngxx and jpegxx are essentially C++ wrappers around libpng and the IJG JPEG library respectively. However, they do not present all the functionality of these libraries through their API. Only the most common features are present in the C++ libraries.
It is my hope that more of the missing functionality will be added over time, though it is likely that some of the more "esoteric" features will never be mapped in to C++.
Limitations of jpegxx
The features of the IJG JPEG library not supported by jpegxx are as follows:
- Colour spaces outside of RGB and greyscale
- Progressive encoding when saving a JPEG stream
- Incremental decoding of progressively encoded JPEG streams
- Examination of low-level properties and structures in a JPEG stream
- Tight control over compression and quantization parameters
- I/O suspension
- Abbreviated data streams (where Huffman tables are found in a separate stream to one or more associated JPEG data streams)
- Lossless transforms (e.g. rotation by multiples of 90 degrees)
Limitations of pngxx
The features of libpng not supported by pngxx are as follows:
- Progressive encoding when saving a PNG stream
- Incremental decoding of progressively encoded PNG streams
- Handling of unknown chunks (they are discarded by pngxx when loading images)
- Loading and saving of images that use something other than 8 bits per colour component. pngxx will read such images, but they are converted in to an 8 bit per component image by the time they reach client code.
- Exposure to the palettes of PNG images that were saved in a paletted fashion, or dithering an image during load to conform to a particular palette. pngxx will load paletted images, but all pixels will come through as colours rather than palette indices.
- Saving paletted images.
- Examination of low-level properties and structures in a PNG stream
- Gamma adjustment while loading images
- Anything to do with MNG streams