This is a fork of libpng at version 1.6.39.
The initial goal of this fork was only to reorganize code to make it compliant with Dogfood Layout.
The original README file can be found here.
- Code layout - As stated before that was the primary goal.
- Static linking is the preferred form of linking.
- There is support only for major platforms. Currently I'm building and testing only for Windows and Linux (Ubuntu).
Use CPM to build the library:
- Download latest CPM executable for Windows or Linux.
- Set the
DEV_ROOT
environment variable to the root of your development tree:or$ export DEV_ROOT=my_path
C:\> set DEV_ROOT=c:\my_path
- Run CPM to fetch and build libpng and any dependencies:
cpm -u [email protected]:neacsum/libpng.git libpng
The simplified build process described above builds only the static library in release configuration. To build other targets you can use one of the following commands:
cmake --workflow --preset lib_debug
- build debug librarycmake --workflow --preset all_release
- build library, examples and test programs in release configurationcmake --workflow --preset all_degug
- build library, examples and test program in debug mode
File | Description |
---|---|
BUILD.bat | Windows build script |
CMakeLists.txt | CMake configuration file |
CMakePresets.json | CMake preset build configurations |
cpm.json | CPM configuration file |
png.sln | Visual Studio solution file |
include | directory for header files (private and public API) |
include/png | directory for public API headers |
docs | directory for documentation (including user manual) |
examples | sample programs |
fab | files related to build process |
PNG_STDIO_SUPPORTED
- all supported platforms have stdio.hPNG_WRITE_FLUSH_SUPPORTED
- optional flushing adds very little memory overheadPNG_WRITE_SUPPORTED
- this library supports reading and writing of PNG filesPNG_READ_SUPPORTED
- samePNG_CONSOLE_IO_SUPPORTED
- error handling will be restructured at some pointPNG_VERSION_INFO_ONLY
- DLL versioning is not a priorityPNG_SIMPLIFIED_READ
- simplified API is always availablePNG_SIMPLIFIED_WRITE
- samePNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED
- yes, stdio.h is availablePNG_POINTER_INDEXING_SUPPORTED
- any standard conforming compiler can do pointer indexingPNG_SEQUENTIAL_READ_SUPPORTED
PNG_EASY_ACCESS
The following active feature selection flags have been removed: PNG_bKGD_SUPPORTED
,PNG_cHRM_SUPPORTED
, PNG_gAMA_SUPPORTED
, PNG_pCAL_SUPPORTED
,PNG_pHYs_SUPPORTED
, PNG_sBIT_SUPPORTED
, PNG_sBIT_SUPPORTED
,PNG_iCCP_SUPPORTED
, PNG_sPLT_SUPPORTED
, PNG_TEXT_SUPPORTED
,PNG_zTXt_SUPPORTED
,PNG_iTXt_SUPPORTED
, PNG_WRITE_zTXt_SUPPORTED
,PNG_tIME_SUPPORTED
, PNG_tRNS_SUPPORTED
, PNG_sCAL_SUPPORTED
,PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
, PNG_HANDLE_AS_UNKNOWN_SUPPORTED
,PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
,PNG_SEQUENTIAL_READ_SUPPORTED
, PNG_INFO_IMAGE_SUPPORTED
, PNG_SET_USER_LIMITS_SUPPORTED
,PNG_INCH_CONVERSIONS_SUPPORTED
, PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
, PNG_GET_PALETTE_MAX_SUPPORTED
, PNG_READ_INT_FUNCTIONS_SUPPORTED
, PNG_WRITE_INT_FUNCTIONS_SUPPORTED
, PNG_SAVE_INT_32_SUPPORTED
, PNG_SET_OPTION_SUPPORTED
, PNG_TIME_RFC1123_SUPPORTED
, PNG_COLORSPACE_SUPPORTED
, PNG_CONVERT_tIME_SUPPORTED
, PNG_GAMMA_SUPPORTED
, PNG_WRITE_tRNS_SUPPORTED
, PNG_WRITE_tIME_SUPPORTED
, PNG_WRITE_tEXt_SUPPORTED
, PNG_WRITE_sRGB_SUPPORTED
, PNG_WRITE_sPLT_SUPPORTED
, PNG_WRITE_sCAL_SUPPORTED
, PNG_WRITE_sBIT_SUPPORTED
, PNG_WRITE_pHYs_SUPPORTED
, PNG_WRITE_pCAL_SUPPORTED
, PNG_WRITE_oFFs_SUPPORTED
, PNG_WRITE_iTXt_SUPPORTED
, PNG_WRITE_hIST_SUPPORTED
, PNG_WRITE_gAMA_SUPPORTED
, PNG_WRITE_eXIf_SUPPORTED
, PNG_WRITE_cHRM_SUPPORTED
, PNG_WRITE_bKGD_SUPPORTED
, PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
, PNG_WRITE_USER_TRANSFORM_SUPPORTED
, PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
, PNG_WRITE_TRANSFORMS_SUPPORTED
, PNG_WRITE_TEXT_SUPPORTED
, PNG_WRITE_SWAP_SUPPORTED
, PNG_WRITE_SWAP_ALPHA_SUPPORTED
, PNG_WRITE_SHIFT_SUPPORTED
, PNG_WRITE_PACK_SUPPORTED
, PNG_WRITE_PACKSWAP_SUPPORTED
, PNG_WRITE_OPTIMIZE_CMF_SUPPORTED
, PNG_WRITE_INVERT_SUPPORTED
, PNG_WRITE_INVERT_ALPHA_SUPPORTED
, PNG_WRITE_INTERLACING_SUPPORTED
, PNG_WRITE_GET_PALETTE_MAX_SUPPORTED
, PNG_WRITE_FILTER_SUPPORTED
, PNG_WRITE_FILLER_SUPPORTED
, PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED
, PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED
, PNG_WRITE_COMPRESSED_TEXT_SUPPORTED
, PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED
, PNG_WRITE_BGR_SUPPORTED
, PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
, PNG_WRITE_16BIT_SUPPORTED
, PNG_WARNINGS_SUPPORTED
, PNG_USER_TRANSFORM_PTR_SUPPORTED
, PNG_USER_TRANSFORM_INFO_SUPPORTED
, PNG_USER_MEM_SUPPORTED
, PNG_USER_LIMITS_SUPPORTED
, PNG_USER_CHUNKS_SUPPORTED
, PNG_UNKNOWN_CHUNKS_SUPPORTED
, PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED
, PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED
, PNG_SIMPLIFIED_READ_BGR_SUPPORTED
, PNG_SIMPLIFIED_READ_AFIRST_SUPPORTED
, PNG_SET_OPTION_SUPPORTED
, PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED
PNG_READ_zTXt_SUPPORTED
, PNG_READ_tRNS_SUPPORTED
, PNG_READ_tIME_SUPPORTED
, PNG_READ_tEXt_SUPPORTED
, PNG_READ_sRGB_SUPPORTED
, PNG_READ_sPLT_SUPPORTED
, PNG_READ_sCAL_SUPPORTED
, PNG_READ_sBIT_SUPPORTED
, PNG_READ_pHYs_SUPPORTED
, PNG_READ_pCAL_SUPPORTED
, PNG_READ_oFFs_SUPPORTED
, PNG_READ_iTXt_SUPPORTED
, PNG_READ_iCCP_SUPPORTED
, PNG_READ_hIST_SUPPORTED
, PNG_READ_gAMA_SUPPORTED
, PNG_READ_eXIf_SUPPORTED
, PNG_READ_cHRM_SUPPORTED
, PNG_READ_bKGD_SUPPORTED
, PNG_READ_USER_TRANSFORM_SUPPORTED
, PNG_READ_USER_CHUNKS_SUPPORTED
, PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
, PNG_READ_TRANSFORMS_SUPPORTED
, PNG_READ_TEXT_SUPPORTED
, PNG_READ_SWAP_SUPPORTED
, PNG_READ_SWAP_ALPHA_SUPPORTED
, PNG_READ_STRIP_ALPHA_SUPPORTED
, PNG_READ_STRIP_16_TO_8_SUPPORTED
, PNG_READ_SHIFT_SUPPORTED
, PNG_READ_SCALE_16_TO_8_SUPPORTED
, PNG_READ_RGB_TO_GRAY_SUPPORTED
, PNG_READ_QUANTIZE_SUPPORTED
, PNG_READ_PACK_SUPPORTED
, PNG_READ_OPT_PLTE_SUPPORTED
, PNG_READ_INVERT_SUPPORTED
, PNG_READ_INVERT_ALPHA_SUPPORTED
, PNG_READ_INTERLACING_SUPPORTED
, PNG_READ_GRAY_TO_RGB_SUPPORTED
, PNG_READ_GET_PALETTE_MAX_SUPPORTED
, PNG_READ_GAMMA_SUPPORTED
, PNG_READ_FILLER_SUPPORTED
, PNG_READ_EXPAND_SUPPORTED
, PNG_READ_EXPAND_16_SUPPORTED
, PNG_READ_COMPRESSED_TEXT_SUPPORTED
, PNG_READ_COMPOSITE_NODIV_SUPPORTED
, PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED
, PNG_READ_BGR_SUPPORTED
, PNG_READ_BACKGROUND_SUPPORTED
, PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
, PNG_READ_ALPHA_MODE_SUPPORTED
, PNG_READ_16BIT_SUPPORTED
, PNG_PROGRESSIVE_READ_SUPPORTED
, PNG_FORMAT_BGR_SUPPORTED
,PNG_FORMAT_AFIRST_SUPPORTED
, PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED
, PNG_BENIGN_READ_ERRORS_SUPPORTED
, PNG_BENIGN_ERRORS_SUPPORTED
, PNG_16BIT_SUPPORTED
A system-wide loadable library should have all the features available in case an application needs those. If linking with a static library, linkers are sufficiently smart to pick only required modules.
Some of these feature selection flags were not even used (e.g. PNG_SIMPLIFIED_READ_BGR_SUPPORTED
, PNG_SET_USER_LIMITS_SUPPORTED
, PNG_SET_OPTION_SUPPORTED
, PNG_READ_TEXT_SUPPORTED
)
The following inactive feature selection flags and their associated code have been removed:
- PNG_MNG_FEATURES_SUPPORTED - MNG seems like a dead format
- All PNG source files are renamed to *.CPP and compiled as C++ code
- Huge pngpriv.h include file has been broken in individual includes:
- pngmem.h - private functions defined in pngmem.cpp
- pngerror.h private functions defined in pngerror.cpp
- trans.h private functions defined in pngrtran.cpp, pngwtran.cpp and pngtrans.cpp
- rutil.h private functions defined in rutil.cpp
- wutil.h private functions defined in wutil.cpp
- Some redefinitions of standard types have been removed:
png_charp
-char*
png_const_charp
-const char*
- Removed
png_voidcast
andpng_constcast
macros. Why choose casting style in a header file when you can do it in the source file where you know if it is a "C" or a "C++" file. - Separate callback signatures for user read and write functions. Const-correctness is important.
- Added const qualifiers to
png_malloc_ptr
andpng_free_ptr