Home | History | Annotate | Download | only in libpng
      1 libpng-manual.txt - A description on how to use and modify libpng
      2 
      3  libpng version 1.6.10 - March 6, 2014
      4  Updated and distributed by Glenn Randers-Pehrson
      5  <glennrp at users.sourceforge.net>
      6  Copyright (c) 1998-2014 Glenn Randers-Pehrson
      7 
      8  This document is released under the libpng license.
      9  For conditions of distribution and use, see the disclaimer
     10  and license in png.h
     11 
     12  Based on:
     13 
     14  libpng versions 0.97, January 1998, through 1.6.10 - March 6, 2014
     15  Updated and distributed by Glenn Randers-Pehrson
     16  Copyright (c) 1998-2014 Glenn Randers-Pehrson
     17 
     18  libpng 1.0 beta 6  version 0.96 May 28, 1997
     19  Updated and distributed by Andreas Dilger
     20  Copyright (c) 1996, 1997 Andreas Dilger
     21 
     22  libpng 1.0 beta 2 - version 0.88  January 26, 1996
     23  For conditions of distribution and use, see copyright
     24  notice in png.h. Copyright (c) 1995, 1996 Guy Eric
     25  Schalnat, Group 42, Inc.
     26 
     27  Updated/rewritten per request in the libpng FAQ
     28  Copyright (c) 1995, 1996 Frank J. T. Wojcik
     29  December 18, 1995 & January 20, 1996
     30 
     31  TABLE OF CONTENTS
     32 
     33     I. Introduction
     34    II. Structures
     35   III. Reading
     36    IV. Writing
     37     V. Simplified API
     38    VI. Modifying/Customizing libpng
     39   VII. MNG support
     40  VIII. Changes to Libpng from version 0.88
     41    IX. Changes to Libpng from version 1.0.x to 1.2.x
     42     X. Changes to Libpng from version 1.0.x/1.2.x to 1.4.x
     43    XI. Changes to Libpng from version 1.4.x to 1.5.x
     44   XII. Changes to Libpng from version 1.5.x to 1.6.x
     45  XIII. Detecting libpng
     46   XIV. Source code repository
     47    XV. Coding style
     48   XVI. Y2K Compliance in libpng
     49 
     50 I. Introduction
     51 
     52 This file describes how to use and modify the PNG reference library
     53 (known as libpng) for your own use.  In addition to this
     54 file, example.c is a good starting point for using the library, as
     55 it is heavily commented and should include everything most people
     56 will need.  We assume that libpng is already installed; see the
     57 INSTALL file for instructions on how to install libpng.
     58 
     59 For examples of libpng usage, see the files "example.c", "pngtest.c",
     60 and the files in the "contrib" directory, all of which are included in
     61 the libpng distribution.
     62 
     63 Libpng was written as a companion to the PNG specification, as a way
     64 of reducing the amount of time and effort it takes to support the PNG
     65 file format in application programs.
     66 
     67 The PNG specification (second edition), November 2003, is available as
     68 a W3C Recommendation and as an ISO Standard (ISO/IEC 15948:2004 (E)) at
     69 <http://www.w3.org/TR/2003/REC-PNG-20031110/
     70 The W3C and ISO documents have identical technical content.
     71 
     72 The PNG-1.2 specification is available at
     73 <http://www.libpng.org/pub/png/documents/>.  It is technically equivalent
     74 to the PNG specification (second edition) but has some additional material.
     75 
     76 The PNG-1.0 specification is available
     77 as RFC 2083 <http://www.libpng.org/pub/png/documents/> and as a
     78 W3C Recommendation <http://www.w3.org/TR/REC.png.html>.
     79 
     80 Some additional chunks are described in the special-purpose public chunks
     81 documents at <http://www.libpng.org/pub/png/documents/>.
     82 
     83 Other information
     84 about PNG, and the latest version of libpng, can be found at the PNG home
     85 page, <http://www.libpng.org/pub/png/>.
     86 
     87 Most users will not have to modify the library significantly; advanced
     88 users may want to modify it more.  All attempts were made to make it as
     89 complete as possible, while keeping the code easy to understand.
     90 Currently, this library only supports C.  Support for other languages
     91 is being considered.
     92 
     93 Libpng has been designed to handle multiple sessions at one time,
     94 to be easily modifiable, to be portable to the vast majority of
     95 machines (ANSI, K&R, 16-, 32-, and 64-bit) available, and to be easy
     96 to use.  The ultimate goal of libpng is to promote the acceptance of
     97 the PNG file format in whatever way possible.  While there is still
     98 work to be done (see the TODO file), libpng should cover the
     99 majority of the needs of its users.
    100 
    101 Libpng uses zlib for its compression and decompression of PNG files.
    102 Further information about zlib, and the latest version of zlib, can
    103 be found at the zlib home page, <http://www.info-zip.org/pub/infozip/zlib/>.
    104 The zlib compression utility is a general purpose utility that is
    105 useful for more than PNG files, and can be used without libpng.
    106 See the documentation delivered with zlib for more details.
    107 You can usually find the source files for the zlib utility wherever you
    108 find the libpng source files.
    109 
    110 Libpng is thread safe, provided the threads are using different
    111 instances of the structures.  Each thread should have its own
    112 png_struct and png_info instances, and thus its own image.
    113 Libpng does not protect itself against two threads using the
    114 same instance of a structure.
    115 
    116 II. Structures
    117 
    118 There are two main structures that are important to libpng, png_struct
    119 and png_info.  Both are internal structures that are no longer exposed
    120 in the libpng interface (as of libpng 1.5.0).
    121 
    122 The png_info structure is designed to provide information about the
    123 PNG file.  At one time, the fields of png_info were intended to be
    124 directly accessible to the user.  However, this tended to cause problems
    125 with applications using dynamically loaded libraries, and as a result
    126 a set of interface functions for png_info (the png_get_*() and png_set_*()
    127 functions) was developed, and direct access to the png_info fields was
    128 deprecated..
    129 
    130 The png_struct structure is the object used by the library to decode a
    131 single image.  As of 1.5.0 this structure is also not exposed.
    132 
    133 Almost all libpng APIs require a pointer to a png_struct as the first argument.
    134 Many (in particular the png_set and png_get APIs) also require a pointer
    135 to png_info as the second argument.  Some application visible macros
    136 defined in png.h designed for basic data access (reading and writing
    137 integers in the PNG format) don't take a png_info pointer, but it's almost
    138 always safe to assume that a (png_struct*) has to be passed to call an API
    139 function.
    140 
    141 You can have more than one png_info structure associated with an image,
    142 as illustrated in pngtest.c, one for information valid prior to the
    143 IDAT chunks and another (called "end_info" below) for things after them.
    144 
    145 The png.h header file is an invaluable reference for programming with libpng.
    146 And while I'm on the topic, make sure you include the libpng header file:
    147 
    148 #include <png.h>
    149 
    150 and also (as of libpng-1.5.0) the zlib header file, if you need it:
    151 
    152 #include <zlib.h>
    153 
    154 Types
    155 
    156 The png.h header file defines a number of integral types used by the
    157 APIs.  Most of these are fairly obvious; for example types corresponding
    158 to integers of particular sizes and types for passing color values.
    159 
    160 One exception is how non-integral numbers are handled.  For application
    161 convenience most APIs that take such numbers have C (double) arguments;
    162 however, internally PNG, and libpng, use 32 bit signed integers and encode
    163 the value by multiplying by 100,000.  As of libpng 1.5.0 a convenience
    164 macro PNG_FP_1 is defined in png.h along with a type (png_fixed_point)
    165 which is simply (png_int_32).
    166 
    167 All APIs that take (double) arguments also have a matching API that
    168 takes the corresponding fixed point integer arguments.  The fixed point
    169 API has the same name as the floating point one with "_fixed" appended.
    170 The actual range of values permitted in the APIs is frequently less than
    171 the full range of (png_fixed_point) (-21474 to +21474).  When APIs require
    172 a non-negative argument the type is recorded as png_uint_32 above.  Consult
    173 the header file and the text below for more information.
    174 
    175 Special care must be take with sCAL chunk handling because the chunk itself
    176 uses non-integral values encoded as strings containing decimal floating point
    177 numbers.  See the comments in the header file.
    178 
    179 Configuration
    180 
    181 The main header file function declarations are frequently protected by C
    182 preprocessing directives of the form:
    183 
    184     #ifdef PNG_feature_SUPPORTED
    185     declare-function
    186     #endif
    187     ...
    188     #ifdef PNG_feature_SUPPORTED
    189     use-function
    190     #endif
    191 
    192 The library can be built without support for these APIs, although a
    193 standard build will have all implemented APIs.  Application programs
    194 should check the feature macros before using an API for maximum
    195 portability.  From libpng 1.5.0 the feature macros set during the build
    196 of libpng are recorded in the header file "pnglibconf.h" and this file
    197 is always included by png.h.
    198 
    199 If you don't need to change the library configuration from the default, skip to
    200 the next section ("Reading").
    201 
    202 Notice that some of the makefiles in the 'scripts' directory and (in 1.5.0) all
    203 of the build project files in the 'projects' directory simply copy
    204 scripts/pnglibconf.h.prebuilt to pnglibconf.h.  This means that these build
    205 systems do not permit easy auto-configuration of the library - they only
    206 support the default configuration.
    207 
    208 The easiest way to make minor changes to the libpng configuration when
    209 auto-configuration is supported is to add definitions to the command line
    210 using (typically) CPPFLAGS.  For example:
    211 
    212 CPPFLAGS=-DPNG_NO_FLOATING_ARITHMETIC
    213 
    214 will change the internal libpng math implementation for gamma correction and
    215 other arithmetic calculations to fixed point, avoiding the need for fast
    216 floating point support.  The result can be seen in the generated pnglibconf.h -
    217 make sure it contains the changed feature macro setting.
    218 
    219 If you need to make more extensive configuration changes - more than one or two
    220 feature macro settings - you can either add -DPNG_USER_CONFIG to the build
    221 command line and put a list of feature macro settings in pngusr.h or you can set
    222 DFA_XTRA (a makefile variable) to a file containing the same information in the
    223 form of 'option' settings.
    224 
    225 A. Changing pnglibconf.h
    226 
    227 A variety of methods exist to build libpng.  Not all of these support
    228 reconfiguration of pnglibconf.h.  To reconfigure pnglibconf.h it must either be
    229 rebuilt from scripts/pnglibconf.dfa using awk or it must be edited by hand.
    230 
    231 Hand editing is achieved by copying scripts/pnglibconf.h.prebuilt to
    232 pnglibconf.h and changing the lines defining the supported features, paying
    233 very close attention to the 'option' information in scripts/pnglibconf.dfa
    234 that describes those features and their requirements.  This is easy to get
    235 wrong.
    236 
    237 B. Configuration using DFA_XTRA
    238 
    239 Rebuilding from pnglibconf.dfa is easy if a functioning 'awk', or a later
    240 variant such as 'nawk' or 'gawk', is available.  The configure build will
    241 automatically find an appropriate awk and build pnglibconf.h.
    242 The scripts/pnglibconf.mak file contains a set of make rules for doing the
    243 same thing if configure is not used, and many of the makefiles in the scripts
    244 directory use this approach.
    245 
    246 When rebuilding simply write a new file containing changed options and set
    247 DFA_XTRA to the name of this file.  This causes the build to append the new file
    248 to the end of scripts/pnglibconf.dfa.  The pngusr.dfa file should contain lines
    249 of the following forms:
    250 
    251 everything = off
    252 
    253 This turns all optional features off.  Include it at the start of pngusr.dfa to
    254 make it easier to build a minimal configuration.  You will need to turn at least
    255 some features on afterward to enable either reading or writing code, or both.
    256 
    257 option feature on
    258 option feature off
    259 
    260 Enable or disable a single feature.  This will automatically enable other
    261 features required by a feature that is turned on or disable other features that
    262 require a feature which is turned off.  Conflicting settings will cause an error
    263 message to be emitted by awk.
    264 
    265 setting feature default value
    266 
    267 Changes the default value of setting 'feature' to 'value'.  There are a small
    268 number of settings listed at the top of pnglibconf.h, they are documented in the
    269 source code.  Most of these values have performance implications for the library
    270 but most of them have no visible effect on the API.  Some can also be overridden
    271 from the API.
    272 
    273 This method of building a customized pnglibconf.h is illustrated in
    274 contrib/pngminim/*.  See the "$(PNGCONF):" target in the makefile and
    275 pngusr.dfa in these directories.
    276 
    277 C. Configuration using PNG_USER_CONFIG
    278 
    279 If -DPNG_USER_CONFIG is added to the CPPFLAGS when pnglibconf.h is built,
    280 the file pngusr.h will automatically be included before the options in
    281 scripts/pnglibconf.dfa are processed.  Your pngusr.h file should contain only
    282 macro definitions turning features on or off or setting settings.
    283 
    284 Apart from the global setting "everything = off" all the options listed above
    285 can be set using macros in pngusr.h:
    286 
    287 #define PNG_feature_SUPPORTED
    288 
    289 is equivalent to:
    290 
    291 option feature on
    292 
    293 #define PNG_NO_feature
    294 
    295 is equivalent to:
    296 
    297 option feature off
    298 
    299 #define PNG_feature value
    300 
    301 is equivalent to:
    302 
    303 setting feature default value
    304 
    305 Notice that in both cases, pngusr.dfa and pngusr.h, the contents of the
    306 pngusr file you supply override the contents of scripts/pnglibconf.dfa
    307 
    308 If confusing or incomprehensible behavior results it is possible to
    309 examine the intermediate file pnglibconf.dfn to find the full set of
    310 dependency information for each setting and option.  Simply locate the
    311 feature in the file and read the C comments that precede it.
    312 
    313 This method is also illustrated in the contrib/pngminim/* makefiles and
    314 pngusr.h.
    315 
    316 III. Reading
    317 
    318 We'll now walk you through the possible functions to call when reading
    319 in a PNG file sequentially, briefly explaining the syntax and purpose
    320 of each one.  See example.c and png.h for more detail.  While
    321 progressive reading is covered in the next section, you will still
    322 need some of the functions discussed in this section to read a PNG
    323 file.
    324 
    325 Setup
    326 
    327 You will want to do the I/O initialization(*) before you get into libpng,
    328 so if it doesn't work, you don't have much to undo.  Of course, you
    329 will also want to insure that you are, in fact, dealing with a PNG
    330 file.  Libpng provides a simple check to see if a file is a PNG file.
    331 To use it, pass in the first 1 to 8 bytes of the file to the function
    332 png_sig_cmp(), and it will return 0 (false) if the bytes match the
    333 corresponding bytes of the PNG signature, or nonzero (true) otherwise.
    334 Of course, the more bytes you pass in, the greater the accuracy of the
    335 prediction.
    336 
    337 If you are intending to keep the file pointer open for use in libpng,
    338 you must ensure you don't read more than 8 bytes from the beginning
    339 of the file, and you also have to make a call to png_set_sig_bytes_read()
    340 with the number of bytes you read from the beginning.  Libpng will
    341 then only check the bytes (if any) that your program didn't read.
    342 
    343 (*): If you are not using the standard I/O functions, you will need
    344 to replace them with custom functions.  See the discussion under
    345 Customizing libpng.
    346 
    347 
    348     FILE *fp = fopen(file_name, "rb");
    349     if (!fp)
    350     {
    351        return (ERROR);
    352     }
    353 
    354     fread(header, 1, number, fp);
    355     is_png = !png_sig_cmp(header, 0, number);
    356 
    357     if (!is_png)
    358     {
    359        return (NOT_PNG);
    360     }
    361 
    362 
    363 Next, png_struct and png_info need to be allocated and initialized.  In
    364 order to ensure that the size of these structures is correct even with a
    365 dynamically linked libpng, there are functions to initialize and
    366 allocate the structures.  We also pass the library version, optional
    367 pointers to error handling functions, and a pointer to a data struct for
    368 use by the error functions, if necessary (the pointer and functions can
    369 be NULL if the default error handlers are to be used).  See the section
    370 on Changes to Libpng below regarding the old initialization functions.
    371 The structure allocation functions quietly return NULL if they fail to
    372 create the structure, so your application should check for that.
    373 
    374     png_structp png_ptr = png_create_read_struct
    375         (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
    376         user_error_fn, user_warning_fn);
    377 
    378     if (!png_ptr)
    379        return (ERROR);
    380 
    381     png_infop info_ptr = png_create_info_struct(png_ptr);
    382 
    383     if (!info_ptr)
    384     {
    385        png_destroy_read_struct(&png_ptr,
    386            (png_infopp)NULL, (png_infopp)NULL);
    387        return (ERROR);
    388     }
    389 
    390 If you want to use your own memory allocation routines,
    391 use a libpng that was built with PNG_USER_MEM_SUPPORTED defined, and use
    392 png_create_read_struct_2() instead of png_create_read_struct():
    393 
    394     png_structp png_ptr = png_create_read_struct_2
    395         (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
    396         user_error_fn, user_warning_fn, (png_voidp)
    397         user_mem_ptr, user_malloc_fn, user_free_fn);
    398 
    399 The error handling routines passed to png_create_read_struct()
    400 and the memory alloc/free routines passed to png_create_struct_2()
    401 are only necessary if you are not using the libpng supplied error
    402 handling and memory alloc/free functions.
    403 
    404 When libpng encounters an error, it expects to longjmp back
    405 to your routine.  Therefore, you will need to call setjmp and pass
    406 your png_jmpbuf(png_ptr).  If you read the file from different
    407 routines, you will need to update the longjmp buffer every time you enter
    408 a new routine that will call a png_*() function.
    409 
    410 See your documentation of setjmp/longjmp for your compiler for more
    411 information on setjmp/longjmp.  See the discussion on libpng error
    412 handling in the Customizing Libpng section below for more information
    413 on the libpng error handling.  If an error occurs, and libpng longjmp's
    414 back to your setjmp, you will want to call png_destroy_read_struct() to
    415 free any memory.
    416 
    417     if (setjmp(png_jmpbuf(png_ptr)))
    418     {
    419        png_destroy_read_struct(&png_ptr, &info_ptr,
    420            &end_info);
    421        fclose(fp);
    422        return (ERROR);
    423     }
    424 
    425 Pass (png_infopp)NULL instead of &end_info if you didn't create
    426 an end_info structure.
    427 
    428 If you would rather avoid the complexity of setjmp/longjmp issues,
    429 you can compile libpng with PNG_NO_SETJMP, in which case
    430 errors will result in a call to PNG_ABORT() which defaults to abort().
    431 
    432 You can #define PNG_ABORT() to a function that does something
    433 more useful than abort(), as long as your function does not
    434 return.
    435 
    436 Now you need to set up the input code.  The default for libpng is to
    437 use the C function fread().  If you use this, you will need to pass a
    438 valid FILE * in the function png_init_io().  Be sure that the file is
    439 opened in binary mode.  If you wish to handle reading data in another
    440 way, you need not call the png_init_io() function, but you must then
    441 implement the libpng I/O methods discussed in the Customizing Libpng
    442 section below.
    443 
    444     png_init_io(png_ptr, fp);
    445 
    446 If you had previously opened the file and read any of the signature from
    447 the beginning in order to see if this was a PNG file, you need to let
    448 libpng know that there are some bytes missing from the start of the file.
    449 
    450     png_set_sig_bytes(png_ptr, number);
    451 
    452 You can change the zlib compression buffer size to be used while
    453 reading compressed data with
    454 
    455     png_set_compression_buffer_size(png_ptr, buffer_size);
    456 
    457 where the default size is 8192 bytes.  Note that the buffer size
    458 is changed immediately and the buffer is reallocated immediately,
    459 instead of setting a flag to be acted upon later.
    460 
    461 If you want CRC errors to be handled in a different manner than
    462 the default, use
    463 
    464     png_set_crc_action(png_ptr, crit_action, ancil_action);
    465 
    466 The values for png_set_crc_action() say how libpng is to handle CRC errors in
    467 ancillary and critical chunks, and whether to use the data contained
    468 therein.  Note that it is impossible to "discard" data in a critical
    469 chunk.
    470 
    471 Choices for (int) crit_action are
    472    PNG_CRC_DEFAULT      0  error/quit
    473    PNG_CRC_ERROR_QUIT   1  error/quit
    474    PNG_CRC_WARN_USE     3  warn/use data
    475    PNG_CRC_QUIET_USE    4  quiet/use data
    476    PNG_CRC_NO_CHANGE    5  use the current value
    477 
    478 Choices for (int) ancil_action are
    479    PNG_CRC_DEFAULT      0  error/quit
    480    PNG_CRC_ERROR_QUIT   1  error/quit
    481    PNG_CRC_WARN_DISCARD 2  warn/discard data
    482    PNG_CRC_WARN_USE     3  warn/use data
    483    PNG_CRC_QUIET_USE    4  quiet/use data
    484    PNG_CRC_NO_CHANGE    5  use the current value
    485 
    486 Setting up callback code
    487 
    488 You can set up a callback function to handle any unknown chunks in the
    489 input stream. You must supply the function
    490 
    491     read_chunk_callback(png_structp png_ptr,
    492          png_unknown_chunkp chunk);
    493     {
    494        /* The unknown chunk structure contains your
    495           chunk data, along with similar data for any other
    496           unknown chunks: */
    497 
    498            png_byte name[5];
    499            png_byte *data;
    500            png_size_t size;
    501 
    502        /* Note that libpng has already taken care of
    503           the CRC handling */
    504 
    505        /* put your code here.  Search for your chunk in the
    506           unknown chunk structure, process it, and return one
    507           of the following: */
    508 
    509        return (-n); /* chunk had an error */
    510        return (0); /* did not recognize */
    511        return (n); /* success */
    512     }
    513 
    514 (You can give your function another name that you like instead of
    515 "read_chunk_callback")
    516 
    517 To inform libpng about your function, use
    518 
    519     png_set_read_user_chunk_fn(png_ptr, user_chunk_ptr,
    520         read_chunk_callback);
    521 
    522 This names not only the callback function, but also a user pointer that
    523 you can retrieve with
    524 
    525     png_get_user_chunk_ptr(png_ptr);
    526 
    527 If you call the png_set_read_user_chunk_fn() function, then all unknown
    528 chunks which the callback does not handle will be saved when read.  You can
    529 cause them to be discarded by returning '1' ("handled") instead of '0'.  This
    530 behavior will change in libpng 1.7 and the default handling set by the
    531 png_set_keep_unknown_chunks() function, described below, will be used when the
    532 callback returns 0.  If you want the existing behavior you should set the global
    533 default to PNG_HANDLE_CHUNK_IF_SAFE now; this is compatible with all current
    534 versions of libpng and with 1.7.  Libpng 1.6 issues a warning if you keep the
    535 default, or PNG_HANDLE_CHUNK_NEVER, and the callback returns 0.
    536 
    537 At this point, you can set up a callback function that will be
    538 called after each row has been read, which you can use to control
    539 a progress meter or the like.  It's demonstrated in pngtest.c.
    540 You must supply a function
    541 
    542     void read_row_callback(png_structp png_ptr,
    543        png_uint_32 row, int pass);
    544     {
    545       /* put your code here */
    546     }
    547 
    548 (You can give it another name that you like instead of "read_row_callback")
    549 
    550 To inform libpng about your function, use
    551 
    552     png_set_read_status_fn(png_ptr, read_row_callback);
    553 
    554 When this function is called the row has already been completely processed and
    555 the 'row' and 'pass' refer to the next row to be handled.  For the
    556 non-interlaced case the row that was just handled is simply one less than the
    557 passed in row number, and pass will always be 0.  For the interlaced case the
    558 same applies unless the row value is 0, in which case the row just handled was
    559 the last one from one of the preceding passes.  Because interlacing may skip a
    560 pass you cannot be sure that the preceding pass is just 'pass-1', if you really
    561 need to know what the last pass is record (row,pass) from the callback and use
    562 the last recorded value each time.
    563 
    564 As with the user transform you can find the output row using the
    565 PNG_ROW_FROM_PASS_ROW macro.
    566 
    567 Unknown-chunk handling
    568 
    569 Now you get to set the way the library processes unknown chunks in the
    570 input PNG stream. Both known and unknown chunks will be read.  Normal
    571 behavior is that known chunks will be parsed into information in
    572 various info_ptr members while unknown chunks will be discarded. This
    573 behavior can be wasteful if your application will never use some known
    574 chunk types. To change this, you can call:
    575 
    576     png_set_keep_unknown_chunks(png_ptr, keep,
    577         chunk_list, num_chunks);
    578 
    579     keep       - 0: default unknown chunk handling
    580                  1: ignore; do not keep
    581                  2: keep only if safe-to-copy
    582                  3: keep even if unsafe-to-copy
    583 
    584                You can use these definitions:
    585                  PNG_HANDLE_CHUNK_AS_DEFAULT   0
    586                  PNG_HANDLE_CHUNK_NEVER        1
    587                  PNG_HANDLE_CHUNK_IF_SAFE      2
    588                  PNG_HANDLE_CHUNK_ALWAYS       3
    589 
    590     chunk_list - list of chunks affected (a byte string,
    591                  five bytes per chunk, NULL or '\0' if
    592                  num_chunks is positive; ignored if
    593                  numchunks <= 0).
    594 
    595     num_chunks - number of chunks affected; if 0, all
    596                  unknown chunks are affected.  If positive,
    597                  only the chunks in the list are affected,
    598                  and if negative all unknown chunks and
    599                  all known chunks except for the IHDR,
    600                  PLTE, tRNS, IDAT, and IEND chunks are
    601                  affected.
    602 
    603 Unknown chunks declared in this way will be saved as raw data onto a
    604 list of png_unknown_chunk structures.  If a chunk that is normally
    605 known to libpng is named in the list, it will be handled as unknown,
    606 according to the "keep" directive.  If a chunk is named in successive
    607 instances of png_set_keep_unknown_chunks(), the final instance will
    608 take precedence.  The IHDR and IEND chunks should not be named in
    609 chunk_list; if they are, libpng will process them normally anyway.
    610 If you know that your application will never make use of some particular
    611 chunks, use PNG_HANDLE_CHUNK_NEVER (or 1) as demonstrated below.
    612 
    613 Here is an example of the usage of png_set_keep_unknown_chunks(),
    614 where the private "vpAg" chunk will later be processed by a user chunk
    615 callback function:
    616 
    617     png_byte vpAg[5]={118, 112,  65, 103, (png_byte) '\0'};
    618 
    619     #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
    620       png_byte unused_chunks[]=
    621       {
    622         104,  73,  83,  84, (png_byte) '\0',   /* hIST */
    623         105,  84,  88, 116, (png_byte) '\0',   /* iTXt */
    624         112,  67,  65,  76, (png_byte) '\0',   /* pCAL */
    625         115,  67,  65,  76, (png_byte) '\0',   /* sCAL */
    626         115,  80,  76,  84, (png_byte) '\0',   /* sPLT */
    627         116,  73,  77,  69, (png_byte) '\0',   /* tIME */
    628       };
    629     #endif
    630 
    631     ...
    632 
    633     #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
    634       /* ignore all unknown chunks
    635        * (use global setting "2" for libpng16 and earlier):
    636        */
    637       png_set_keep_unknown_chunks(read_ptr, 2, NULL, 0);
    638 
    639       /* except for vpAg: */
    640       png_set_keep_unknown_chunks(read_ptr, 2, vpAg, 1);
    641 
    642       /* also ignore unused known chunks: */
    643       png_set_keep_unknown_chunks(read_ptr, 1, unused_chunks,
    644          (int)(sizeof unused_chunks)/5);
    645     #endif
    646 
    647 User limits
    648 
    649 The PNG specification allows the width and height of an image to be as
    650 large as 2^31-1 (0x7fffffff), or about 2.147 billion rows and columns.
    651 Since very few applications really need to process such large images,
    652 we have imposed an arbitrary 1-million limit on rows and columns.
    653 Larger images will be rejected immediately with a png_error() call. If
    654 you wish to change this limit, you can use
    655 
    656    png_set_user_limits(png_ptr, width_max, height_max);
    657 
    658 to set your own limits, or use width_max = height_max = 0x7fffffffL
    659 to allow all valid dimensions (libpng may reject some very large images
    660 anyway because of potential buffer overflow conditions).
    661 
    662 You should put this statement after you create the PNG structure and
    663 before calling png_read_info(), png_read_png(), or png_process_data().
    664 
    665 When writing a PNG datastream, put this statement before calling
    666 png_write_info() or png_write_png().
    667 
    668 If you need to retrieve the limits that are being applied, use
    669 
    670    width_max = png_get_user_width_max(png_ptr);
    671    height_max = png_get_user_height_max(png_ptr);
    672 
    673 The PNG specification sets no limit on the number of ancillary chunks
    674 allowed in a PNG datastream.  You can impose a limit on the total number
    675 of sPLT, tEXt, iTXt, zTXt, and unknown chunks that will be stored, with
    676 
    677    png_set_chunk_cache_max(png_ptr, user_chunk_cache_max);
    678 
    679 where 0x7fffffffL means unlimited.  You can retrieve this limit with
    680 
    681    chunk_cache_max = png_get_chunk_cache_max(png_ptr);
    682 
    683 You can also set a limit on the amount of memory that a compressed chunk
    684 other than IDAT can occupy, with
    685 
    686    png_set_chunk_malloc_max(png_ptr, user_chunk_malloc_max);
    687 
    688 and you can retrieve the limit with
    689 
    690    chunk_malloc_max = png_get_chunk_malloc_max(png_ptr);
    691 
    692 Any chunks that would cause either of these limits to be exceeded will
    693 be ignored.
    694 
    695 Information about your system
    696 
    697 If you intend to display the PNG or to incorporate it in other image data you
    698 need to tell libpng information about your display or drawing surface so that
    699 libpng can convert the values in the image to match the display.
    700 
    701 From libpng-1.5.4 this information can be set before reading the PNG file
    702 header.  In earlier versions png_set_gamma() existed but behaved incorrectly if
    703 called before the PNG file header had been read and png_set_alpha_mode() did not
    704 exist.
    705 
    706 If you need to support versions prior to libpng-1.5.4 test the version number
    707 as illustrated below using "PNG_LIBPNG_VER >= 10504" and follow the procedures
    708 described in the appropriate manual page.
    709 
    710 You give libpng the encoding expected by your system expressed as a 'gamma'
    711 value.  You can also specify a default encoding for the PNG file in
    712 case the required information is missing from the file.  By default libpng
    713 assumes that the PNG data matches your system, to keep this default call:
    714 
    715    png_set_gamma(png_ptr, screen_gamma, output_gamma);
    716 
    717 or you can use the fixed point equivalent:
    718 
    719    png_set_gamma_fixed(png_ptr, PNG_FP_1*screen_gamma,
    720       PNG_FP_1*output_gamma);
    721 
    722 If you don't know the gamma for your system it is probably 2.2 - a good
    723 approximation to the IEC standard for display systems (sRGB).  If images are
    724 too contrasty or washed out you got the value wrong - check your system
    725 documentation!
    726 
    727 Many systems permit the system gamma to be changed via a lookup table in the
    728 display driver, a few systems, including older Macs, change the response by
    729 default.  As of 1.5.4 three special values are available to handle common
    730 situations:
    731 
    732    PNG_DEFAULT_sRGB: Indicates that the system conforms to the
    733                      IEC 61966-2-1 standard.  This matches almost
    734                      all systems.
    735    PNG_GAMMA_MAC_18: Indicates that the system is an older
    736                      (pre Mac OS 10.6) Apple Macintosh system with
    737                      the default settings.
    738    PNG_GAMMA_LINEAR: Just the fixed point value for 1.0 - indicates
    739                      that the system expects data with no gamma
    740                      encoding.
    741 
    742 You would use the linear (unencoded) value if you need to process the pixel
    743 values further because this avoids the need to decode and re-encode each
    744 component value whenever arithmetic is performed.  A lot of graphics software
    745 uses linear values for this reason, often with higher precision component values
    746 to preserve overall accuracy.
    747 
    748 
    749 The output_gamma value expresses how to decode the output values, not how
    750 they are encoded.  The values used correspond to the normal numbers used to
    751 describe the overall gamma of a computer display system; for example 2.2 for
    752 an sRGB conformant system.  The values are scaled by 100000 in the _fixed
    753 version of the API (so 220000 for sRGB.)
    754 
    755 The inverse of the value is always used to provide a default for the PNG file
    756 encoding if it has no gAMA chunk and if png_set_gamma() has not been called
    757 to override the PNG gamma information.
    758 
    759 When the ALPHA_OPTIMIZED mode is selected the output gamma is used to encode
    760 opaque pixels however pixels with lower alpha values are not encoded,
    761 regardless of the output gamma setting.
    762 
    763 When the standard Porter Duff handling is requested with mode 1 the output
    764 encoding is set to be linear and the output_gamma value is only relevant
    765 as a default for input data that has no gamma information.  The linear output
    766 encoding will be overridden if png_set_gamma() is called - the results may be
    767 highly unexpected!
    768 
    769 The following numbers are derived from the sRGB standard and the research
    770 behind it.  sRGB is defined to be approximated by a PNG gAMA chunk value of
    771 0.45455 (1/2.2) for PNG.  The value implicitly includes any viewing
    772 correction required to take account of any differences in the color
    773 environment of the original scene and the intended display environment; the
    774 value expresses how to *decode* the image for display, not how the original
    775 data was *encoded*.
    776 
    777 sRGB provides a peg for the PNG standard by defining a viewing environment.
    778 sRGB itself, and earlier TV standards, actually use a more complex transform
    779 (a linear portion then a gamma 2.4 power law) than PNG can express.  (PNG is
    780 limited to simple power laws.)  By saying that an image for direct display on
    781 an sRGB conformant system should be stored with a gAMA chunk value of 45455
    782 (11.3.3.2 and 11.3.3.5 of the ISO PNG specification) the PNG specification
    783 makes it possible to derive values for other display systems and
    784 environments.
    785 
    786 The Mac value is deduced from the sRGB based on an assumption that the actual
    787 extra viewing correction used in early Mac display systems was implemented as
    788 a power 1.45 lookup table.
    789 
    790 Any system where a programmable lookup table is used or where the behavior of
    791 the final display device characteristics can be changed requires system
    792 specific code to obtain the current characteristic.  However this can be
    793 difficult and most PNG gamma correction only requires an approximate value.
    794 
    795 By default, if png_set_alpha_mode() is not called, libpng assumes that all
    796 values are unencoded, linear, values and that the output device also has a
    797 linear characteristic.  This is only very rarely correct - it is invariably
    798 better to call png_set_alpha_mode() with PNG_DEFAULT_sRGB than rely on the
    799 default if you don't know what the right answer is!
    800 
    801 The special value PNG_GAMMA_MAC_18 indicates an older Mac system (pre Mac OS
    802 10.6) which used a correction table to implement a somewhat lower gamma on an
    803 otherwise sRGB system.
    804 
    805 Both these values are reserved (not simple gamma values) in order to allow
    806 more precise correction internally in the future.
    807 
    808 NOTE: the values can be passed to either the fixed or floating
    809 point APIs, but the floating point API will also accept floating point
    810 values.
    811 
    812 The second thing you may need to tell libpng about is how your system handles
    813 alpha channel information.  Some, but not all, PNG files contain an alpha
    814 channel.  To display these files correctly you need to compose the data onto a
    815 suitable background, as described in the PNG specification.
    816 
    817 Libpng only supports composing onto a single color (using png_set_background;
    818 see below).  Otherwise you must do the composition yourself and, in this case,
    819 you may need to call png_set_alpha_mode:
    820 
    821    #if PNG_LIBPNG_VER >= 10504
    822       png_set_alpha_mode(png_ptr, mode, screen_gamma);
    823    #else
    824       png_set_gamma(png_ptr, screen_gamma, 1.0/screen_gamma);
    825    #endif
    826 
    827 The screen_gamma value is the same as the argument to png_set_gamma; however,
    828 how it affects the output depends on the mode.  png_set_alpha_mode() sets the
    829 file gamma default to 1/screen_gamma, so normally you don't need to call
    830 png_set_gamma.  If you need different defaults call png_set_gamma() before
    831 png_set_alpha_mode() - if you call it after it will override the settings made
    832 by png_set_alpha_mode().
    833 
    834 The mode is as follows:
    835 
    836     PNG_ALPHA_PNG: The data is encoded according to the PNG
    837 specification.  Red, green and blue, or gray, components are
    838 gamma encoded color values and are not premultiplied by the
    839 alpha value.  The alpha value is a linear measure of the
    840 contribution of the pixel to the corresponding final output pixel.
    841 
    842 You should normally use this format if you intend to perform
    843 color correction on the color values; most, maybe all, color
    844 correction software has no handling for the alpha channel and,
    845 anyway, the math to handle pre-multiplied component values is
    846 unnecessarily complex.
    847 
    848 Before you do any arithmetic on the component values you need
    849 to remove the gamma encoding and multiply out the alpha
    850 channel.  See the PNG specification for more detail.  It is
    851 important to note that when an image with an alpha channel is
    852 scaled, linear encoded, pre-multiplied component values must
    853 be used!
    854 
    855 The remaining modes assume you don't need to do any further color correction or
    856 that if you do, your color correction software knows all about alpha (it
    857 probably doesn't!).  They 'associate' the alpha with the color information by
    858 storing color channel values that have been scaled by the alpha.  The
    859 advantage is that the color channels can be resampled (the image can be
    860 scaled) in this form.  The disadvantage is that normal practice is to store
    861 linear, not (gamma) encoded, values and this requires 16-bit channels for
    862 still images rather than the 8-bit channels that are just about sufficient if
    863 gamma encoding is used.  In addition all non-transparent pixel values,
    864 including completely opaque ones, must be gamma encoded to produce the final
    865 image.  These are the 'STANDARD', 'ASSOCIATED' or 'PREMULTIPLIED' modes
    866 described below (the latter being the two common names for associated alpha
    867 color channels). Note that PNG files always contain non-associated color
    868 channels; png_set_alpha_mode() with one of the modes causes the decoder to
    869 convert the pixels to an associated form before returning them to your
    870 application. 
    871 
    872 Since it is not necessary to perform arithmetic on opaque color values so
    873 long as they are not to be resampled and are in the final color space it is
    874 possible to optimize the handling of alpha by storing the opaque pixels in
    875 the PNG format (adjusted for the output color space) while storing partially
    876 opaque pixels in the standard, linear, format.  The accuracy required for
    877 standard alpha composition is relatively low, because the pixels are
    878 isolated, therefore typically the accuracy loss in storing 8-bit linear
    879 values is acceptable.  (This is not true if the alpha channel is used to
    880 simulate transparency over large areas - use 16 bits or the PNG mode in
    881 this case!)  This is the 'OPTIMIZED' mode.  For this mode a pixel is
    882 treated as opaque only if the alpha value is equal to the maximum value.
    883 
    884     PNG_ALPHA_STANDARD:  The data libpng produces is encoded in the
    885 standard way assumed by most correctly written graphics software.
    886 The gamma encoding will be removed by libpng and the
    887 linear component values will be pre-multiplied by the
    888 alpha channel.
    889 
    890 With this format the final image must be re-encoded to
    891 match the display gamma before the image is displayed.
    892 If your system doesn't do that, yet still seems to
    893 perform arithmetic on the pixels without decoding them,
    894 it is broken - check out the modes below.
    895 
    896 With PNG_ALPHA_STANDARD libpng always produces linear
    897 component values, whatever screen_gamma you supply.  The
    898 screen_gamma value is, however, used as a default for
    899 the file gamma if the PNG file has no gamma information.
    900 
    901 If you call png_set_gamma() after png_set_alpha_mode() you
    902 will override the linear encoding.  Instead the
    903 pre-multiplied pixel values will be gamma encoded but
    904 the alpha channel will still be linear.  This may
    905 actually match the requirements of some broken software,
    906 but it is unlikely.
    907 
    908 While linear 8-bit data is often used it has
    909 insufficient precision for any image with a reasonable
    910 dynamic range.  To avoid problems, and if your software
    911 supports it, use png_set_expand_16() to force all
    912 components to 16 bits.
    913 
    914     PNG_ALPHA_OPTIMIZED: This mode is the same as PNG_ALPHA_STANDARD
    915 except that completely opaque pixels are gamma encoded according to
    916 the screen_gamma value.  Pixels with alpha less than 1.0
    917 will still have linear components.
    918 
    919 Use this format if you have control over your
    920 compositing software and so don't do other arithmetic
    921 (such as scaling) on the data you get from libpng.  Your
    922 compositing software can simply copy opaque pixels to
    923 the output but still has linear values for the
    924 non-opaque pixels.
    925 
    926 In normal compositing, where the alpha channel encodes
    927 partial pixel coverage (as opposed to broad area
    928 translucency), the inaccuracies of the 8-bit
    929 representation of non-opaque pixels are irrelevant.
    930 
    931 You can also try this format if your software is broken;
    932 it might look better.
    933 
    934     PNG_ALPHA_BROKEN: This is PNG_ALPHA_STANDARD; however, all component
    935 values, including the alpha channel are gamma encoded.  This is
    936 broken because, in practice, no implementation that uses this choice
    937 correctly undoes the encoding before handling alpha composition.  Use this
    938 choice only if other serious errors in the software or hardware you use
    939 mandate it.  In most cases of broken software or hardware the bug in the
    940 final display manifests as a subtle halo around composited parts of the
    941 image.  You may not even perceive this as a halo; the composited part of
    942 the image may simply appear separate from the background, as though it had
    943 been cut out of paper and pasted on afterward.
    944 
    945 If you don't have to deal with bugs in software or hardware, or if you can fix
    946 them, there are three recommended ways of using png_set_alpha_mode():
    947 
    948    png_set_alpha_mode(png_ptr, PNG_ALPHA_PNG,
    949        screen_gamma);
    950 
    951 You can do color correction on the result (libpng does not currently
    952 support color correction internally).  When you handle the alpha channel
    953 you need to undo the gamma encoding and multiply out the alpha.
    954 
    955    png_set_alpha_mode(png_ptr, PNG_ALPHA_STANDARD,
    956        screen_gamma);
    957    png_set_expand_16(png_ptr);
    958 
    959 If you are using the high level interface, don't call png_set_expand_16();
    960 instead pass PNG_TRANSFORM_EXPAND_16 to the interface.
    961 
    962 With this mode you can't do color correction, but you can do arithmetic,
    963 including composition and scaling, on the data without further processing.
    964 
    965    png_set_alpha_mode(png_ptr, PNG_ALPHA_OPTIMIZED,
    966        screen_gamma);
    967 
    968 You can avoid the expansion to 16-bit components with this mode, but you
    969 lose the ability to scale the image or perform other linear arithmetic.
    970 All you can do is compose the result onto a matching output.  Since this
    971 mode is libpng-specific you also need to write your own composition
    972 software.
    973 
    974 The following are examples of calls to png_set_alpha_mode to achieve the
    975 required overall gamma correction and, where necessary, alpha
    976 premultiplication.
    977 
    978     png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB);
    979 
    980 This is the default libpng handling of the alpha channel - it is not
    981 pre-multiplied into the color components.  In addition the call states
    982 that the output is for a sRGB system and causes all PNG files without gAMA
    983 chunks to be assumed to be encoded using sRGB.
    984 
    985     png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);
    986 
    987 In this case the output is assumed to be something like an sRGB conformant
    988 display preceeded by a power-law lookup table of power 1.45.  This is how
    989 early Mac systems behaved.
    990 
    991     png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR);
    992 
    993 This is the classic Jim Blinn approach and will work in academic
    994 environments where everything is done by the book.  It has the shortcoming
    995 of assuming that input PNG data with no gamma information is linear - this
    996 is unlikely to be correct unless the PNG files where generated locally.
    997 Most of the time the output precision will be so low as to show
    998 significant banding in dark areas of the image.
    999 
   1000     png_set_expand_16(pp);
   1001     png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_DEFAULT_sRGB);
   1002 
   1003 This is a somewhat more realistic Jim Blinn inspired approach.  PNG files
   1004 are assumed to have the sRGB encoding if not marked with a gamma value and
   1005 the output is always 16 bits per component.  This permits accurate scaling
   1006 and processing of the data.  If you know that your input PNG files were
   1007 generated locally you might need to replace PNG_DEFAULT_sRGB with the
   1008 correct value for your system.
   1009 
   1010     png_set_alpha_mode(pp, PNG_ALPHA_OPTIMIZED, PNG_DEFAULT_sRGB);
   1011 
   1012 If you just need to composite the PNG image onto an existing background
   1013 and if you control the code that does this you can use the optimization
   1014 setting.  In this case you just copy completely opaque pixels to the
   1015 output.  For pixels that are not completely transparent (you just skip
   1016 those) you do the composition math using png_composite or png_composite_16
   1017 below then encode the resultant 8-bit or 16-bit values to match the output
   1018 encoding.
   1019 
   1020     Other cases
   1021 
   1022 If neither the PNG nor the standard linear encoding work for you because
   1023 of the software or hardware you use then you have a big problem.  The PNG
   1024 case will probably result in halos around the image.  The linear encoding
   1025 will probably result in a washed out, too bright, image (it's actually too
   1026 contrasty.)  Try the ALPHA_OPTIMIZED mode above - this will probably
   1027 substantially reduce the halos.  Alternatively try:
   1028 
   1029     png_set_alpha_mode(pp, PNG_ALPHA_BROKEN, PNG_DEFAULT_sRGB);
   1030 
   1031 This option will also reduce the halos, but there will be slight dark
   1032 halos round the opaque parts of the image where the background is light.
   1033 In the OPTIMIZED mode the halos will be light halos where the background
   1034 is dark.  Take your pick - the halos are unavoidable unless you can get
   1035 your hardware/software fixed!  (The OPTIMIZED approach is slightly
   1036 faster.)
   1037 
   1038 When the default gamma of PNG files doesn't match the output gamma.
   1039 If you have PNG files with no gamma information png_set_alpha_mode allows
   1040 you to provide a default gamma, but it also sets the ouput gamma to the
   1041 matching value.  If you know your PNG files have a gamma that doesn't
   1042 match the output you can take advantage of the fact that
   1043 png_set_alpha_mode always sets the output gamma but only sets the PNG
   1044 default if it is not already set:
   1045 
   1046     png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB);
   1047     png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);
   1048 
   1049 The first call sets both the default and the output gamma values, the
   1050 second call overrides the output gamma without changing the default.  This
   1051 is easier than achieving the same effect with png_set_gamma.  You must use
   1052 PNG_ALPHA_PNG for the first call - internal checking in png_set_alpha will
   1053 fire if more than one call to png_set_alpha_mode and png_set_background is
   1054 made in the same read operation, however multiple calls with PNG_ALPHA_PNG
   1055 are ignored.
   1056 
   1057 If you don't need, or can't handle, the alpha channel you can call
   1058 png_set_background() to remove it by compositing against a fixed color.  Don't
   1059 call png_set_strip_alpha() to do this - it will leave spurious pixel values in
   1060 transparent parts of this image.
   1061 
   1062    png_set_background(png_ptr, &background_color,
   1063        PNG_BACKGROUND_GAMMA_SCREEN, 0, 1);
   1064 
   1065 The background_color is an RGB or grayscale value according to the data format
   1066 libpng will produce for you.  Because you don't yet know the format of the PNG
   1067 file, if you call png_set_background at this point you must arrange for the
   1068 format produced by libpng to always have 8-bit or 16-bit components and then
   1069 store the color as an 8-bit or 16-bit color as appropriate.  The color contains
   1070 separate gray and RGB component values, so you can let libpng produce gray or
   1071 RGB output according to the input format, but low bit depth grayscale images
   1072 must always be converted to at least 8-bit format.  (Even though low bit depth
   1073 grayscale images can't have an alpha channel they can have a transparent
   1074 color!)
   1075 
   1076 You set the transforms you need later, either as flags to the high level
   1077 interface or libpng API calls for the low level interface.  For reference the
   1078 settings and API calls required are:
   1079 
   1080 8-bit values:
   1081    PNG_TRANSFORM_SCALE_16 | PNG_EXPAND
   1082    png_set_expand(png_ptr); png_set_scale_16(png_ptr);
   1083 
   1084    If you must get exactly the same inaccurate results
   1085    produced by default in versions prior to libpng-1.5.4,
   1086    use PNG_TRANSFORM_STRIP_16 and png_set_strip_16(png_ptr)
   1087    instead.
   1088 
   1089 16-bit values:
   1090    PNG_TRANSFORM_EXPAND_16
   1091    png_set_expand_16(png_ptr);
   1092 
   1093 In either case palette image data will be expanded to RGB.  If you just want
   1094 color data you can add PNG_TRANSFORM_GRAY_TO_RGB or png_set_gray_to_rgb(png_ptr)
   1095 to the list.
   1096 
   1097 Calling png_set_background before the PNG file header is read will not work
   1098 prior to libpng-1.5.4.  Because the failure may result in unexpected warnings or
   1099 errors it is therefore much safer to call png_set_background after the head has
   1100 been read.  Unfortunately this means that prior to libpng-1.5.4 it cannot be
   1101 used with the high level interface.
   1102 
   1103 The high-level read interface
   1104 
   1105 At this point there are two ways to proceed; through the high-level
   1106 read interface, or through a sequence of low-level read operations.
   1107 You can use the high-level interface if (a) you are willing to read
   1108 the entire image into memory, and (b) the input transformations
   1109 you want to do are limited to the following set:
   1110 
   1111     PNG_TRANSFORM_IDENTITY      No transformation
   1112     PNG_TRANSFORM_SCALE_16      Strip 16-bit samples to
   1113                                 8-bit accurately
   1114     PNG_TRANSFORM_STRIP_16      Chop 16-bit samples to
   1115                                 8-bit less accurately
   1116     PNG_TRANSFORM_STRIP_ALPHA   Discard the alpha channel
   1117     PNG_TRANSFORM_PACKING       Expand 1, 2 and 4-bit
   1118                                 samples to bytes
   1119     PNG_TRANSFORM_PACKSWAP      Change order of packed
   1120                                 pixels to LSB first
   1121     PNG_TRANSFORM_EXPAND        Perform set_expand()
   1122     PNG_TRANSFORM_INVERT_MONO   Invert monochrome images
   1123     PNG_TRANSFORM_SHIFT         Normalize pixels to the
   1124                                 sBIT depth
   1125     PNG_TRANSFORM_BGR           Flip RGB to BGR, RGBA
   1126                                 to BGRA
   1127     PNG_TRANSFORM_SWAP_ALPHA    Flip RGBA to ARGB or GA
   1128                                 to AG
   1129     PNG_TRANSFORM_INVERT_ALPHA  Change alpha from opacity
   1130                                 to transparency
   1131     PNG_TRANSFORM_SWAP_ENDIAN   Byte-swap 16-bit samples
   1132     PNG_TRANSFORM_GRAY_TO_RGB   Expand grayscale samples
   1133                                 to RGB (or GA to RGBA)
   1134     PNG_TRANSFORM_EXPAND_16     Expand samples to 16 bits
   1135 
   1136 (This excludes setting a background color, doing gamma transformation,
   1137 quantizing, and setting filler.)  If this is the case, simply do this:
   1138 
   1139     png_read_png(png_ptr, info_ptr, png_transforms, NULL)
   1140 
   1141 where png_transforms is an integer containing the bitwise OR of some
   1142 set of transformation flags.  This call is equivalent to png_read_info(),
   1143 followed the set of transformations indicated by the transform mask,
   1144 then png_read_image(), and finally png_read_end().
   1145 
   1146 (The final parameter of this call is not yet used.  Someday it might point
   1147 to transformation parameters required by some future input transform.)
   1148 
   1149 You must use png_transforms and not call any png_set_transform() functions
   1150 when you use png_read_png().
   1151 
   1152 After you have called png_read_png(), you can retrieve the image data
   1153 with
   1154 
   1155    row_pointers = png_get_rows(png_ptr, info_ptr);
   1156 
   1157 where row_pointers is an array of pointers to the pixel data for each row:
   1158 
   1159    png_bytep row_pointers[height];
   1160 
   1161 If you know your image size and pixel size ahead of time, you can allocate
   1162 row_pointers prior to calling png_read_png() with
   1163 
   1164    if (height > PNG_UINT_32_MAX/(sizeof (png_byte)))
   1165       png_error (png_ptr,
   1166           "Image is too tall to process in memory");
   1167 
   1168    if (width > PNG_UINT_32_MAX/pixel_size)
   1169       png_error (png_ptr,
   1170           "Image is too wide to process in memory");
   1171 
   1172    row_pointers = png_malloc(png_ptr,
   1173        height*(sizeof (png_bytep)));
   1174 
   1175    for (int i=0; i<height, i++)
   1176       row_pointers[i]=NULL;  /* security precaution */
   1177 
   1178    for (int i=0; i<height, i++)
   1179       row_pointers[i]=png_malloc(png_ptr,
   1180           width*pixel_size);
   1181 
   1182    png_set_rows(png_ptr, info_ptr, &row_pointers);
   1183 
   1184 Alternatively you could allocate your image in one big block and define
   1185 row_pointers[i] to point into the proper places in your block.
   1186 
   1187 If you use png_set_rows(), the application is responsible for freeing
   1188 row_pointers (and row_pointers[i], if they were separately allocated).
   1189 
   1190 If you don't allocate row_pointers ahead of time, png_read_png() will
   1191 do it, and it'll be free'ed by libpng when you call png_destroy_*().
   1192 
   1193 The low-level read interface
   1194 
   1195 If you are going the low-level route, you are now ready to read all
   1196 the file information up to the actual image data.  You do this with a
   1197 call to png_read_info().
   1198 
   1199     png_read_info(png_ptr, info_ptr);
   1200 
   1201 This will process all chunks up to but not including the image data.
   1202 
   1203 This also copies some of the data from the PNG file into the decode structure
   1204 for use in later transformations.  Important information copied in is:
   1205 
   1206 1) The PNG file gamma from the gAMA chunk.  This overwrites the default value
   1207 provided by an earlier call to png_set_gamma or png_set_alpha_mode.
   1208 
   1209 2) Prior to libpng-1.5.4 the background color from a bKGd chunk.  This
   1210 damages the information provided by an earlier call to png_set_background
   1211 resulting in unexpected behavior.  Libpng-1.5.4 no longer does this.
   1212 
   1213 3) The number of significant bits in each component value.  Libpng uses this to
   1214 optimize gamma handling by reducing the internal lookup table sizes.
   1215 
   1216 4) The transparent color information from a tRNS chunk.  This can be modified by
   1217 a later call to png_set_tRNS.
   1218 
   1219 Querying the info structure
   1220 
   1221 Functions are used to get the information from the info_ptr once it
   1222 has been read.  Note that these fields may not be completely filled
   1223 in until png_read_end() has read the chunk data following the image.
   1224 
   1225     png_get_IHDR(png_ptr, info_ptr, &width, &height,
   1226        &bit_depth, &color_type, &interlace_type,
   1227        &compression_type, &filter_method);
   1228 
   1229     width          - holds the width of the image
   1230                      in pixels (up to 2^31).
   1231 
   1232     height         - holds the height of the image
   1233                      in pixels (up to 2^31).
   1234 
   1235     bit_depth      - holds the bit depth of one of the
   1236                      image channels.  (valid values are
   1237                      1, 2, 4, 8, 16 and depend also on
   1238                      the color_type.  See also
   1239                      significant bits (sBIT) below).
   1240 
   1241     color_type     - describes which color/alpha channels
   1242                          are present.
   1243                      PNG_COLOR_TYPE_GRAY
   1244                         (bit depths 1, 2, 4, 8, 16)
   1245                      PNG_COLOR_TYPE_GRAY_ALPHA
   1246                         (bit depths 8, 16)
   1247                      PNG_COLOR_TYPE_PALETTE
   1248                         (bit depths 1, 2, 4, 8)
   1249                      PNG_COLOR_TYPE_RGB
   1250                         (bit_depths 8, 16)
   1251                      PNG_COLOR_TYPE_RGB_ALPHA
   1252                         (bit_depths 8, 16)
   1253 
   1254                      PNG_COLOR_MASK_PALETTE
   1255                      PNG_COLOR_MASK_COLOR
   1256                      PNG_COLOR_MASK_ALPHA
   1257 
   1258     interlace_type - (PNG_INTERLACE_NONE or
   1259                      PNG_INTERLACE_ADAM7)
   1260 
   1261     compression_type - (must be PNG_COMPRESSION_TYPE_BASE
   1262                      for PNG 1.0)
   1263 
   1264     filter_method  - (must be PNG_FILTER_TYPE_BASE
   1265                      for PNG 1.0, and can also be
   1266                      PNG_INTRAPIXEL_DIFFERENCING if
   1267                      the PNG datastream is embedded in
   1268                      a MNG-1.0 datastream)
   1269 
   1270     Any or all of interlace_type, compression_type, or
   1271     filter_method can be NULL if you are
   1272     not interested in their values.
   1273 
   1274     Note that png_get_IHDR() returns 32-bit data into
   1275     the application's width and height variables.
   1276     This is an unsafe situation if these are 16-bit
   1277     variables.  In such situations, the
   1278     png_get_image_width() and png_get_image_height()
   1279     functions described below are safer.
   1280 
   1281     width            = png_get_image_width(png_ptr,
   1282                          info_ptr);
   1283 
   1284     height           = png_get_image_height(png_ptr,
   1285                          info_ptr);
   1286 
   1287     bit_depth        = png_get_bit_depth(png_ptr,
   1288                          info_ptr);
   1289 
   1290     color_type       = png_get_color_type(png_ptr,
   1291                          info_ptr);
   1292 
   1293     interlace_type   = png_get_interlace_type(png_ptr,
   1294                          info_ptr);
   1295 
   1296     compression_type = png_get_compression_type(png_ptr,
   1297                          info_ptr);
   1298 
   1299     filter_method    = png_get_filter_type(png_ptr,
   1300                          info_ptr);
   1301 
   1302     channels = png_get_channels(png_ptr, info_ptr);
   1303 
   1304     channels       - number of channels of info for the
   1305                      color type (valid values are 1 (GRAY,
   1306                      PALETTE), 2 (GRAY_ALPHA), 3 (RGB),
   1307                      4 (RGB_ALPHA or RGB + filler byte))
   1308 
   1309     rowbytes = png_get_rowbytes(png_ptr, info_ptr);
   1310 
   1311     rowbytes       - number of bytes needed to hold a row
   1312 
   1313     signature = png_get_signature(png_ptr, info_ptr);
   1314 
   1315     signature      - holds the signature read from the
   1316                      file (if any).  The data is kept in
   1317                      the same offset it would be if the
   1318                      whole signature were read (i.e. if an
   1319                      application had already read in 4
   1320                      bytes of signature before starting
   1321                      libpng, the remaining 4 bytes would
   1322                      be in signature[4] through signature[7]
   1323                      (see png_set_sig_bytes())).
   1324 
   1325 These are also important, but their validity depends on whether the chunk
   1326 has been read.  The png_get_valid(png_ptr, info_ptr, PNG_INFO_<chunk>) and
   1327 png_get_<chunk>(png_ptr, info_ptr, ...) functions return non-zero if the
   1328 data has been read, or zero if it is missing.  The parameters to the
   1329 png_get_<chunk> are set directly if they are simple data types, or a
   1330 pointer into the info_ptr is returned for any complex types.
   1331 
   1332 The colorspace data from gAMA, cHRM, sRGB, iCCP, and sBIT chunks
   1333 is simply returned to give the application information about how the
   1334 image was encoded.  Libpng itself only does transformations using the file
   1335 gamma when combining semitransparent pixels with the background color, and,
   1336 since libpng-1.6.0, when converting between 8-bit sRGB and 16-bit linear pixels
   1337 within the simplified API.  Libpng also uses the file gamma when converting
   1338 RGB to gray, beginning with libpng-1.0.5, if the application calls
   1339 png_set_rgb_to_gray()).
   1340 
   1341     png_get_PLTE(png_ptr, info_ptr, &palette,
   1342                      &num_palette);
   1343 
   1344     palette        - the palette for the file
   1345                      (array of png_color)
   1346 
   1347     num_palette    - number of entries in the palette
   1348 
   1349     png_get_gAMA(png_ptr, info_ptr, &file_gamma);
   1350     png_get_gAMA_fixed(png_ptr, info_ptr, &int_file_gamma);
   1351 
   1352     file_gamma     - the gamma at which the file is
   1353                      written (PNG_INFO_gAMA)
   1354 
   1355     int_file_gamma - 100,000 times the gamma at which the
   1356                      file is written
   1357 
   1358     png_get_cHRM(png_ptr, info_ptr,  &white_x, &white_y, &red_x,
   1359                      &red_y, &green_x, &green_y, &blue_x, &blue_y)
   1360     png_get_cHRM_XYZ(png_ptr, info_ptr, &red_X, &red_Y, &red_Z,
   1361                      &green_X, &green_Y, &green_Z, &blue_X, &blue_Y,
   1362                      &blue_Z)
   1363     png_get_cHRM_fixed(png_ptr, info_ptr, &int_white_x,
   1364                      &int_white_y, &int_red_x, &int_red_y,
   1365                      &int_green_x, &int_green_y, &int_blue_x,
   1366                      &int_blue_y)
   1367     png_get_cHRM_XYZ_fixed(png_ptr, info_ptr, &int_red_X, &int_red_Y,
   1368                      &int_red_Z, &int_green_X, &int_green_Y,
   1369                      &int_green_Z, &int_blue_X, &int_blue_Y,
   1370                      &int_blue_Z)
   1371 
   1372     {white,red,green,blue}_{x,y}
   1373                      A color space encoding specified using the
   1374                      chromaticities of the end points and the
   1375                      white point. (PNG_INFO_cHRM)
   1376 
   1377     {red,green,blue}_{X,Y,Z}
   1378                      A color space encoding specified using the
   1379                      encoding end points - the CIE tristimulus
   1380                      specification of the intended color of the red,
   1381                      green and blue channels in the PNG RGB data.
   1382                      The white point is simply the sum of the three
   1383                      end points. (PNG_INFO_cHRM)
   1384 
   1385     png_get_sRGB(png_ptr, info_ptr, &srgb_intent);
   1386 
   1387     srgb_intent -    the rendering intent (PNG_INFO_sRGB)
   1388                      The presence of the sRGB chunk
   1389                      means that the pixel data is in the
   1390                      sRGB color space.  This chunk also
   1391                      implies specific values of gAMA and
   1392                      cHRM.
   1393 
   1394     png_get_iCCP(png_ptr, info_ptr, &name,
   1395        &compression_type, &profile, &proflen);
   1396 
   1397     name             - The profile name.
   1398 
   1399     compression_type - The compression type; always
   1400                        PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
   1401                        You may give NULL to this argument to
   1402                        ignore it.
   1403 
   1404     profile          - International Color Consortium color
   1405                        profile data. May contain NULs.
   1406 
   1407     proflen          - length of profile data in bytes.
   1408 
   1409     png_get_sBIT(png_ptr, info_ptr, &sig_bit);
   1410 
   1411     sig_bit        - the number of significant bits for
   1412                      (PNG_INFO_sBIT) each of the gray,
   1413                      red, green, and blue channels,
   1414                      whichever are appropriate for the
   1415                      given color type (png_color_16)
   1416 
   1417     png_get_tRNS(png_ptr, info_ptr, &trans_alpha,
   1418                      &num_trans, &trans_color);
   1419 
   1420     trans_alpha    - array of alpha (transparency)
   1421                      entries for palette (PNG_INFO_tRNS)
   1422 
   1423     num_trans      - number of transparent entries
   1424                      (PNG_INFO_tRNS)
   1425 
   1426     trans_color    - graylevel or color sample values of
   1427                      the single transparent color for
   1428                      non-paletted images (PNG_INFO_tRNS)
   1429 
   1430     png_get_hIST(png_ptr, info_ptr, &hist);
   1431                      (PNG_INFO_hIST)
   1432 
   1433     hist           - histogram of palette (array of
   1434                      png_uint_16)
   1435 
   1436     png_get_tIME(png_ptr, info_ptr, &mod_time);
   1437 
   1438     mod_time       - time image was last modified
   1439                     (PNG_VALID_tIME)
   1440 
   1441     png_get_bKGD(png_ptr, info_ptr, &background);
   1442 
   1443     background     - background color (of type
   1444                      png_color_16p) (PNG_VALID_bKGD)
   1445                      valid 16-bit red, green and blue
   1446                      values, regardless of color_type
   1447 
   1448     num_comments   = png_get_text(png_ptr, info_ptr,
   1449                      &text_ptr, &num_text);
   1450 
   1451     num_comments   - number of comments
   1452 
   1453     text_ptr       - array of png_text holding image
   1454                      comments
   1455 
   1456     text_ptr[i].compression - type of compression used
   1457                  on "text" PNG_TEXT_COMPRESSION_NONE
   1458                            PNG_TEXT_COMPRESSION_zTXt
   1459                            PNG_ITXT_COMPRESSION_NONE
   1460                            PNG_ITXT_COMPRESSION_zTXt
   1461 
   1462     text_ptr[i].key   - keyword for comment.  Must contain
   1463                          1-79 characters.
   1464 
   1465     text_ptr[i].text  - text comments for current
   1466                          keyword.  Can be empty.
   1467 
   1468     text_ptr[i].text_length - length of text string,
   1469                  after decompression, 0 for iTXt
   1470 
   1471     text_ptr[i].itxt_length - length of itxt string,
   1472                  after decompression, 0 for tEXt/zTXt
   1473 
   1474     text_ptr[i].lang  - language of comment (empty
   1475                          string for unknown).
   1476 
   1477     text_ptr[i].lang_key  - keyword in UTF-8
   1478                          (empty string for unknown).
   1479 
   1480     Note that the itxt_length, lang, and lang_key
   1481     members of the text_ptr structure only exist when the
   1482     library is built with iTXt chunk support.  Prior to
   1483     libpng-1.4.0 the library was built by default without
   1484     iTXt support. Also note that when iTXt is supported,
   1485     they contain NULL pointers when the "compression"
   1486     field contains PNG_TEXT_COMPRESSION_NONE or
   1487     PNG_TEXT_COMPRESSION_zTXt.
   1488 
   1489     num_text       - number of comments (same as
   1490                      num_comments; you can put NULL here
   1491                      to avoid the duplication)
   1492 
   1493     Note while png_set_text() will accept text, language,
   1494     and translated keywords that can be NULL pointers, the
   1495     structure returned by png_get_text will always contain
   1496     regular zero-terminated C strings.  They might be
   1497     empty strings but they will never be NULL pointers.
   1498 
   1499     num_spalettes = png_get_sPLT(png_ptr, info_ptr,
   1500        &palette_ptr);
   1501 
   1502     num_spalettes  - number of sPLT chunks read.
   1503 
   1504     palette_ptr    - array of palette structures holding
   1505                      contents of one or more sPLT chunks
   1506                      read.
   1507 
   1508     png_get_oFFs(png_ptr, info_ptr, &offset_x, &offset_y,
   1509        &unit_type);
   1510 
   1511     offset_x       - positive offset from the left edge
   1512                      of the screen (can be negative)
   1513 
   1514     offset_y       - positive offset from the top edge
   1515                      of the screen (can be negative)
   1516 
   1517     unit_type      - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
   1518 
   1519     png_get_pHYs(png_ptr, info_ptr, &res_x, &res_y,
   1520        &unit_type);
   1521 
   1522     res_x          - pixels/unit physical resolution in
   1523                      x direction
   1524 
   1525     res_y          - pixels/unit physical resolution in
   1526                      x direction
   1527 
   1528     unit_type      - PNG_RESOLUTION_UNKNOWN,
   1529                      PNG_RESOLUTION_METER
   1530 
   1531     png_get_sCAL(png_ptr, info_ptr, &unit, &width,
   1532        &height)
   1533 
   1534     unit        - physical scale units (an integer)
   1535 
   1536     width       - width of a pixel in physical scale units
   1537 
   1538     height      - height of a pixel in physical scale units
   1539                  (width and height are doubles)
   1540 
   1541     png_get_sCAL_s(png_ptr, info_ptr, &unit, &width,
   1542        &height)
   1543 
   1544     unit        - physical scale units (an integer)
   1545 
   1546     width       - width of a pixel in physical scale units
   1547                   (expressed as a string)
   1548 
   1549     height      - height of a pixel in physical scale units
   1550                  (width and height are strings like "2.54")
   1551 
   1552     num_unknown_chunks = png_get_unknown_chunks(png_ptr,
   1553        info_ptr, &unknowns)
   1554 
   1555     unknowns          - array of png_unknown_chunk
   1556                         structures holding unknown chunks
   1557 
   1558     unknowns[i].name  - name of unknown chunk
   1559 
   1560     unknowns[i].data  - data of unknown chunk
   1561 
   1562     unknowns[i].size  - size of unknown chunk's data
   1563 
   1564     unknowns[i].location - position of chunk in file
   1565 
   1566     The value of "i" corresponds to the order in which the
   1567     chunks were read from the PNG file or inserted with the
   1568     png_set_unknown_chunks() function.
   1569 
   1570     The value of "location" is a bitwise "or" of
   1571 
   1572          PNG_HAVE_IHDR  (0x01)
   1573          PNG_HAVE_PLTE  (0x02)
   1574          PNG_AFTER_IDAT (0x08)
   1575 
   1576 The data from the pHYs chunk can be retrieved in several convenient
   1577 forms:
   1578 
   1579     res_x = png_get_x_pixels_per_meter(png_ptr,
   1580        info_ptr)
   1581 
   1582     res_y = png_get_y_pixels_per_meter(png_ptr,
   1583        info_ptr)
   1584 
   1585     res_x_and_y = png_get_pixels_per_meter(png_ptr,
   1586        info_ptr)
   1587 
   1588     res_x = png_get_x_pixels_per_inch(png_ptr,
   1589        info_ptr)
   1590 
   1591     res_y = png_get_y_pixels_per_inch(png_ptr,
   1592        info_ptr)
   1593 
   1594     res_x_and_y = png_get_pixels_per_inch(png_ptr,
   1595        info_ptr)
   1596 
   1597     aspect_ratio = png_get_pixel_aspect_ratio(png_ptr,
   1598        info_ptr)
   1599 
   1600     Each of these returns 0 [signifying "unknown"] if
   1601        the data is not present or if res_x is 0;
   1602        res_x_and_y is 0 if res_x != res_y
   1603 
   1604     Note that because of the way the resolutions are
   1605        stored internally, the inch conversions won't
   1606        come out to exactly even number.  For example,
   1607        72 dpi is stored as 0.28346 pixels/meter, and
   1608        when this is retrieved it is 71.9988 dpi, so
   1609        be sure to round the returned value appropriately
   1610        if you want to display a reasonable-looking result.
   1611 
   1612 The data from the oFFs chunk can be retrieved in several convenient
   1613 forms:
   1614 
   1615     x_offset = png_get_x_offset_microns(png_ptr, info_ptr);
   1616 
   1617     y_offset = png_get_y_offset_microns(png_ptr, info_ptr);
   1618 
   1619     x_offset = png_get_x_offset_inches(png_ptr, info_ptr);
   1620 
   1621     y_offset = png_get_y_offset_inches(png_ptr, info_ptr);
   1622 
   1623     Each of these returns 0 [signifying "unknown" if both
   1624        x and y are 0] if the data is not present or if the
   1625        chunk is present but the unit is the pixel.  The
   1626        remark about inexact inch conversions applies here
   1627        as well, because a value in inches can't always be
   1628        converted to microns and back without some loss
   1629        of precision.
   1630 
   1631 For more information, see the
   1632 PNG specification for chunk contents.  Be careful with trusting
   1633 rowbytes, as some of the transformations could increase the space
   1634 needed to hold a row (expand, filler, gray_to_rgb, etc.).
   1635 See png_read_update_info(), below.
   1636 
   1637 A quick word about text_ptr and num_text.  PNG stores comments in
   1638 keyword/text pairs, one pair per chunk, with no limit on the number
   1639 of text chunks, and a 2^31 byte limit on their size.  While there are
   1640 suggested keywords, there is no requirement to restrict the use to these
   1641 strings.  It is strongly suggested that keywords and text be sensible
   1642 to humans (that's the point), so don't use abbreviations.  Non-printing
   1643 symbols are not allowed.  See the PNG specification for more details.
   1644 There is also no requirement to have text after the keyword.
   1645 
   1646 Keywords should be limited to 79 Latin-1 characters without leading or
   1647 trailing spaces, but non-consecutive spaces are allowed within the
   1648 keyword.  It is possible to have the same keyword any number of times.
   1649 The text_ptr is an array of png_text structures, each holding a
   1650 pointer to a language string, a pointer to a keyword and a pointer to
   1651 a text string.  The text string, language code, and translated
   1652 keyword may be empty or NULL pointers.  The keyword/text
   1653 pairs are put into the array in the order that they are received.
   1654 However, some or all of the text chunks may be after the image, so, to
   1655 make sure you have read all the text chunks, don't mess with these
   1656 until after you read the stuff after the image.  This will be
   1657 mentioned again below in the discussion that goes with png_read_end().
   1658 
   1659 Input transformations
   1660 
   1661 After you've read the header information, you can set up the library
   1662 to handle any special transformations of the image data.  The various
   1663 ways to transform the data will be described in the order that they
   1664 should occur.  This is important, as some of these change the color
   1665 type and/or bit depth of the data, and some others only work on
   1666 certain color types and bit depths.
   1667 
   1668 Transformations you request are ignored if they don't have any meaning for a
   1669 particular input data format.  However some transformations can have an effect
   1670 as a result of a previous transformation.  If you specify a contradictory set of
   1671 transformations, for example both adding and removing the alpha channel, you
   1672 cannot predict the final result.
   1673 
   1674 The color used for the transparency values should be supplied in the same
   1675 format/depth as the current image data.  It is stored in the same format/depth
   1676 as the image data in a tRNS chunk, so this is what libpng expects for this data.
   1677 
   1678 The color used for the background value depends on the need_expand argument as
   1679 described below.
   1680 
   1681 Data will be decoded into the supplied row buffers packed into bytes
   1682 unless the library has been told to transform it into another format.
   1683 For example, 4 bit/pixel paletted or grayscale data will be returned
   1684 2 pixels/byte with the leftmost pixel in the high-order bits of the
   1685 byte, unless png_set_packing() is called.  8-bit RGB data will be stored
   1686 in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha()
   1687 is called to insert filler bytes, either before or after each RGB triplet.
   1688 16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant
   1689 byte of the color value first, unless png_set_scale_16() is called to
   1690 transform it to regular RGB RGB triplets, or png_set_filler() or
   1691 png_set_add alpha() is called to insert filler bytes, either before or
   1692 after each RRGGBB triplet.  Similarly, 8-bit or 16-bit grayscale data can
   1693 be modified with png_set_filler(), png_set_add_alpha(), png_set_strip_16(),
   1694 or png_set_scale_16().
   1695 
   1696 The following code transforms grayscale images of less than 8 to 8 bits,
   1697 changes paletted images to RGB, and adds a full alpha channel if there is
   1698 transparency information in a tRNS chunk.  This is most useful on
   1699 grayscale images with bit depths of 2 or 4 or if there is a multiple-image
   1700 viewing application that wishes to treat all images in the same way.
   1701 
   1702     if (color_type == PNG_COLOR_TYPE_PALETTE)
   1703         png_set_palette_to_rgb(png_ptr);
   1704 
   1705     if (png_get_valid(png_ptr, info_ptr,
   1706         PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png_ptr);
   1707 
   1708     if (color_type == PNG_COLOR_TYPE_GRAY &&
   1709         bit_depth < 8) png_set_expand_gray_1_2_4_to_8(png_ptr);
   1710 
   1711 The first two functions are actually aliases for png_set_expand(), added
   1712 in libpng version 1.0.4, with the function names expanded to improve code
   1713 readability.  In some future version they may actually do different
   1714 things.
   1715 
   1716 As of libpng version 1.2.9, png_set_expand_gray_1_2_4_to_8() was
   1717 added.  It expands the sample depth without changing tRNS to alpha.
   1718 
   1719 As of libpng version 1.5.2, png_set_expand_16() was added.  It behaves as
   1720 png_set_expand(); however, the resultant channels have 16 bits rather than 8.
   1721 Use this when the output color or gray channels are made linear to avoid fairly
   1722 severe accuracy loss.
   1723 
   1724    if (bit_depth < 16)
   1725       png_set_expand_16(png_ptr);
   1726 
   1727 PNG can have files with 16 bits per channel.  If you only can handle
   1728 8 bits per channel, this will strip the pixels down to 8-bit.
   1729 
   1730     if (bit_depth == 16)
   1731 #if PNG_LIBPNG_VER >= 10504
   1732        png_set_scale_16(png_ptr);
   1733 #else
   1734        png_set_strip_16(png_ptr);
   1735 #endif
   1736 
   1737 (The more accurate "png_set_scale_16()" API became available in libpng version
   1738 1.5.4).
   1739 
   1740 If you need to process the alpha channel on the image separately from the image
   1741 data (for example if you convert it to a bitmap mask) it is possible to have
   1742 libpng strip the channel leaving just RGB or gray data:
   1743 
   1744     if (color_type & PNG_COLOR_MASK_ALPHA)
   1745        png_set_strip_alpha(png_ptr);
   1746 
   1747 If you strip the alpha channel you need to find some other way of dealing with
   1748 the information.  If, instead, you want to convert the image to an opaque
   1749 version with no alpha channel use png_set_background; see below.
   1750 
   1751 As of libpng version 1.5.2, almost all useful expansions are supported, the
   1752 major ommissions are conversion of grayscale to indexed images (which can be
   1753 done trivially in the application) and conversion of indexed to grayscale (which
   1754 can be done by a trivial manipulation of the palette.)
   1755 
   1756 In the following table, the 01 means grayscale with depth<8, 31 means
   1757 indexed with depth<8, other numerals represent the color type, "T" means
   1758 the tRNS chunk is present, A means an alpha channel is present, and O
   1759 means tRNS or alpha is present but all pixels in the image are opaque.
   1760 
   1761   FROM  01  31   0  0T  0O   2  2T  2O   3  3T  3O  4A  4O  6A  6O
   1762    TO
   1763    01    -  [G]  -   -   -   -   -   -   -   -   -   -   -   -   -
   1764    31   [Q]  Q  [Q] [Q] [Q]  Q   Q   Q   Q   Q   Q  [Q] [Q]  Q   Q
   1765     0    1   G   +   .   .   G   G   G   G   G   G   B   B  GB  GB
   1766    0T    lt  Gt  t   +   .   Gt  G   G   Gt  G   G   Bt  Bt GBt GBt
   1767    0O    lt  Gt  t   .   +   Gt  Gt  G   Gt  Gt  G   Bt  Bt GBt GBt
   1768     2    C   P   C   C   C   +   .   .   C   -   -  CB  CB   B   B
   1769    2T    Ct  -   Ct  C   C   t   +   t   -   -   -  CBt CBt  Bt  Bt
   1770    2O    Ct  -   Ct  C   C   t   t   +   -   -   -  CBt CBt  Bt  Bt
   1771     3   [Q]  p  [Q] [Q] [Q]  Q   Q   Q   +   .   .  [Q] [Q]  Q   Q
   1772    3T   [Qt] p  [Qt][Q] [Q]  Qt  Qt  Qt  t   +   t  [Qt][Qt] Qt  Qt
   1773    3O   [Qt] p  [Qt][Q] [Q]  Qt  Qt  Qt  t   t   +  [Qt][Qt] Qt  Qt
   1774    4A    lA  G   A   T   T   GA  GT  GT  GA  GT  GT  +   BA  G  GBA
   1775    4O    lA GBA  A   T   T   GA  GT  GT  GA  GT  GT  BA  +  GBA  G
   1776    6A    CA  PA  CA  C   C   A   T  tT   PA  P   P   C  CBA  +   BA
   1777    6O    CA PBA  CA  C   C   A  tT   T   PA  P   P  CBA  C   BA  +
   1778 
   1779 Within the matrix,
   1780      "+" identifies entries where 'from' and 'to' are the same.
   1781      "-" means the transformation is not supported.
   1782      "." means nothing is necessary (a tRNS chunk can just be ignored).
   1783      "t" means the transformation is obtained by png_set_tRNS.
   1784      "A" means the transformation is obtained by png_set_add_alpha().
   1785      "X" means the transformation is obtained by png_set_expand().
   1786      "1" means the transformation is obtained by
   1787          png_set_expand_gray_1_2_4_to_8() (and by png_set_expand()
   1788          if there is no transparency in the original or the final
   1789          format).
   1790      "C" means the transformation is obtained by png_set_gray_to_rgb().
   1791      "G" means the transformation is obtained by png_set_rgb_to_gray().
   1792      "P" means the transformation is obtained by
   1793          png_set_expand_palette_to_rgb().
   1794      "p" means the transformation is obtained by png_set_packing().
   1795      "Q" means the transformation is obtained by png_set_quantize().
   1796      "T" means the transformation is obtained by
   1797          png_set_tRNS_to_alpha().
   1798      "B" means the transformation is obtained by
   1799          png_set_background(), or png_strip_alpha().
   1800 
   1801 When an entry has multiple transforms listed all are required to cause the
   1802 right overall transformation.  When two transforms are separated by a comma
   1803 either will do the job.  When transforms are enclosed in [] the transform should
   1804 do the job but this is currently unimplemented - a different format will result
   1805 if the suggested transformations are used.
   1806 
   1807 In PNG files, the alpha channel in an image
   1808 is the level of opacity.  If you need the alpha channel in an image to
   1809 be the level of transparency instead of opacity, you can invert the
   1810 alpha channel (or the tRNS chunk data) after it's read, so that 0 is
   1811 fully opaque and 255 (in 8-bit or paletted images) or 65535 (in 16-bit
   1812 images) is fully transparent, with
   1813 
   1814     png_set_invert_alpha(png_ptr);
   1815 
   1816 PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as
   1817 they can, resulting in, for example, 8 pixels per byte for 1 bit
   1818 files.  This code expands to 1 pixel per byte without changing the
   1819 values of the pixels:
   1820 
   1821     if (bit_depth < 8)
   1822        png_set_packing(png_ptr);
   1823 
   1824 PNG files have possible bit depths of 1, 2, 4, 8, and 16.  All pixels
   1825 stored in a PNG image have been "scaled" or "shifted" up to the next
   1826 higher possible bit depth (e.g. from 5 bits/sample in the range [0,31]
   1827 to 8 bits/sample in the range [0, 255]).  However, it is also possible
   1828 to convert the PNG pixel data back to the original bit depth of the
   1829 image.  This call reduces the pixels back down to the original bit depth:
   1830 
   1831     png_color_8p sig_bit;
   1832 
   1833     if (png_get_sBIT(png_ptr, info_ptr, &sig_bit))
   1834        png_set_shift(png_ptr, sig_bit);
   1835 
   1836 PNG files store 3-color pixels in red, green, blue order.  This code
   1837 changes the storage of the pixels to blue, green, red:
   1838 
   1839     if (color_type == PNG_COLOR_TYPE_RGB ||
   1840         color_type == PNG_COLOR_TYPE_RGB_ALPHA)
   1841        png_set_bgr(png_ptr);
   1842 
   1843 PNG files store RGB pixels packed into 3 or 6 bytes. This code expands them
   1844 into 4 or 8 bytes for windowing systems that need them in this format:
   1845 
   1846     if (color_type == PNG_COLOR_TYPE_RGB)
   1847        png_set_filler(png_ptr, filler, PNG_FILLER_BEFORE);
   1848 
   1849 where "filler" is the 8 or 16-bit number to fill with, and the location is
   1850 either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
   1851 you want the filler before the RGB or after.  This transformation
   1852 does not affect images that already have full alpha channels.  To add an
   1853 opaque alpha channel, use filler=0xff or 0xffff and PNG_FILLER_AFTER which
   1854 will generate RGBA pixels.
   1855 
   1856 Note that png_set_filler() does not change the color type.  If you want
   1857 to do that, you can add a true alpha channel with
   1858 
   1859     if (color_type == PNG_COLOR_TYPE_RGB ||
   1860        color_type == PNG_COLOR_TYPE_GRAY)
   1861        png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER);
   1862 
   1863 where "filler" contains the alpha value to assign to each pixel.
   1864 This function was added in libpng-1.2.7.
   1865 
   1866 If you are reading an image with an alpha channel, and you need the
   1867 data as ARGB instead of the normal PNG format RGBA:
   1868 
   1869     if (color_type == PNG_COLOR_TYPE_RGB_ALPHA)
   1870        png_set_swap_alpha(png_ptr);
   1871 
   1872 For some uses, you may want a grayscale image to be represented as
   1873 RGB.  This code will do that conversion:
   1874 
   1875     if (color_type == PNG_COLOR_TYPE_GRAY ||
   1876         color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
   1877        png_set_gray_to_rgb(png_ptr);
   1878 
   1879 Conversely, you can convert an RGB or RGBA image to grayscale or grayscale
   1880 with alpha.
   1881 
   1882     if (color_type == PNG_COLOR_TYPE_RGB ||
   1883         color_type == PNG_COLOR_TYPE_RGB_ALPHA)
   1884        png_set_rgb_to_gray(png_ptr, error_action,
   1885           double red_weight, double green_weight);
   1886 
   1887     error_action = 1: silently do the conversion
   1888 
   1889     error_action = 2: issue a warning if the original
   1890                       image has any pixel where
   1891                       red != green or red != blue
   1892 
   1893     error_action = 3: issue an error and abort the
   1894                       conversion if the original
   1895                       image has any pixel where
   1896                       red != green or red != blue
   1897 
   1898     red_weight:       weight of red component
   1899 
   1900     green_weight:     weight of green component
   1901                       If either weight is negative, default
   1902                       weights are used.
   1903 
   1904 In the corresponding fixed point API the red_weight and green_weight values are
   1905 simply scaled by 100,000:
   1906 
   1907     png_set_rgb_to_gray(png_ptr, error_action,
   1908        png_fixed_point red_weight,
   1909        png_fixed_point green_weight);
   1910 
   1911 If you have set error_action = 1 or 2, you can
   1912 later check whether the image really was gray, after processing
   1913 the image rows, with the png_get_rgb_to_gray_status(png_ptr) function.
   1914 It will return a png_byte that is zero if the image was gray or
   1915 1 if there were any non-gray pixels.  Background and sBIT data
   1916 will be silently converted to grayscale, using the green channel
   1917 data for sBIT, regardless of the error_action setting.
   1918 
   1919 The default values come from the PNG file cHRM chunk if present; otherwise, the
   1920 defaults correspond to the ITU-R recommendation 709, and also the sRGB color
   1921 space, as recommended in the Charles Poynton's Colour FAQ,
   1922 <http://www.poynton.com/>, in section 9:
   1923 
   1924    <http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html#RTFToC9>
   1925 
   1926     Y = 0.2126 * R + 0.7152 * G + 0.0722 * B
   1927 
   1928 Previous versions of this document, 1998 through 2002, recommended a slightly
   1929 different formula:
   1930 
   1931     Y = 0.212671 * R + 0.715160 * G + 0.072169 * B
   1932 
   1933 Libpng uses an integer approximation:
   1934 
   1935     Y = (6968 * R + 23434 * G + 2366 * B)/32768
   1936 
   1937 The calculation is done in a linear colorspace, if the image gamma
   1938 can be determined.
   1939 
   1940 The png_set_background() function has been described already; it tells libpng to
   1941 composite images with alpha or simple transparency against the supplied
   1942 background color.  For compatibility with versions of libpng earlier than
   1943 libpng-1.5.4 it is recommended that you call the function after reading the file
   1944 header, even if you don't want to use the color in a bKGD chunk, if one exists.
   1945 
   1946 If the PNG file contains a bKGD chunk (PNG_INFO_bKGD valid),
   1947 you may use this color, or supply another color more suitable for
   1948 the current display (e.g., the background color from a web page).  You
   1949 need to tell libpng how the color is represented, both the format of the
   1950 component values in the color (the number of bits) and the gamma encoding of the
   1951 color.  The function takes two arguments, background_gamma_mode and need_expand
   1952 to convey this information; however, only two combinations are likely to be
   1953 useful:
   1954 
   1955     png_color_16 my_background;
   1956     png_color_16p image_background;
   1957 
   1958     if (png_get_bKGD(png_ptr, info_ptr, &image_background))
   1959        png_set_background(png_ptr, image_background,
   1960            PNG_BACKGROUND_GAMMA_FILE, 1/*needs to be expanded*/, 1);
   1961     else
   1962        png_set_background(png_ptr, &my_background,
   1963            PNG_BACKGROUND_GAMMA_SCREEN, 0/*do not expand*/, 1);
   1964 
   1965 The second call was described above - my_background is in the format of the
   1966 final, display, output produced by libpng.  Because you now know the format of
   1967 the PNG it is possible to avoid the need to choose either 8-bit or 16-bit
   1968 output and to retain palette images (the palette colors will be modified
   1969 appropriately and the tRNS chunk removed.)  However, if you are doing this,
   1970 take great care not to ask for transformations without checking first that
   1971 they apply!
   1972 
   1973 In the first call the background color has the original bit depth and color type
   1974 of the PNG file.  So, for palette images the color is supplied as a palette
   1975 index and for low bit greyscale images the color is a reduced bit value in
   1976 image_background->gray.
   1977 
   1978 If you didn't call png_set_gamma() before reading the file header, for example
   1979 if you need your code to remain compatible with older versions of libpng prior
   1980 to libpng-1.5.4, this is the place to call it.
   1981 
   1982 Do not call it if you called png_set_alpha_mode(); doing so will damage the
   1983 settings put in place by png_set_alpha_mode().  (If png_set_alpha_mode() is
   1984 supported then you can certainly do png_set_gamma() before reading the PNG
   1985 header.)
   1986 
   1987 This API unconditionally sets the screen and file gamma values, so it will
   1988 override the value in the PNG file unless it is called before the PNG file
   1989 reading starts.  For this reason you must always call it with the PNG file
   1990 value when you call it in this position:
   1991 
   1992    if (png_get_gAMA(png_ptr, info_ptr, &file_gamma))
   1993       png_set_gamma(png_ptr, screen_gamma, file_gamma);
   1994 
   1995    else
   1996       png_set_gamma(png_ptr, screen_gamma, 0.45455);
   1997 
   1998 If you need to reduce an RGB file to a paletted file, or if a paletted
   1999 file has more entries then will fit on your screen, png_set_quantize()
   2000 will do that.  Note that this is a simple match quantization that merely
   2001 finds the closest color available.  This should work fairly well with
   2002 optimized palettes, but fairly badly with linear color cubes.  If you
   2003 pass a palette that is larger than maximum_colors, the file will
   2004 reduce the number of colors in the palette so it will fit into
   2005 maximum_colors.  If there is a histogram, libpng will use it to make
   2006 more intelligent choices when reducing the palette.  If there is no
   2007 histogram, it may not do as good a job.
   2008 
   2009    if (color_type & PNG_COLOR_MASK_COLOR)
   2010    {
   2011       if (png_get_valid(png_ptr, info_ptr,
   2012           PNG_INFO_PLTE))
   2013       {
   2014          png_uint_16p histogram = NULL;
   2015 
   2016          png_get_hIST(png_ptr, info_ptr,
   2017              &histogram);
   2018          png_set_quantize(png_ptr, palette, num_palette,
   2019             max_screen_colors, histogram, 1);
   2020       }
   2021 
   2022       else
   2023       {
   2024          png_color std_color_cube[MAX_SCREEN_COLORS] =
   2025             { ... colors ... };
   2026 
   2027          png_set_quantize(png_ptr, std_color_cube,
   2028             MAX_SCREEN_COLORS, MAX_SCREEN_COLORS,
   2029             NULL,0);
   2030       }
   2031    }
   2032 
   2033 PNG files describe monochrome as black being zero and white being one.
   2034 The following code will reverse this (make black be one and white be
   2035 zero):
   2036 
   2037    if (bit_depth == 1 && color_type == PNG_COLOR_TYPE_GRAY)
   2038       png_set_invert_mono(png_ptr);
   2039 
   2040 This function can also be used to invert grayscale and gray-alpha images:
   2041 
   2042    if (color_type == PNG_COLOR_TYPE_GRAY ||
   2043        color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
   2044       png_set_invert_mono(png_ptr);
   2045 
   2046 PNG files store 16-bit pixels in network byte order (big-endian,
   2047 ie. most significant bits first).  This code changes the storage to the
   2048 other way (little-endian, i.e. least significant bits first, the
   2049 way PCs store them):
   2050 
   2051     if (bit_depth == 16)
   2052        png_set_swap(png_ptr);
   2053 
   2054 If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you
   2055 need to change the order the pixels are packed into bytes, you can use:
   2056 
   2057     if (bit_depth < 8)
   2058        png_set_packswap(png_ptr);
   2059 
   2060 Finally, you can write your own transformation function if none of
   2061 the existing ones meets your needs.  This is done by setting a callback
   2062 with
   2063 
   2064     png_set_read_user_transform_fn(png_ptr,
   2065         read_transform_fn);
   2066 
   2067 You must supply the function
   2068 
   2069     void read_transform_fn(png_structp png_ptr, png_row_infop
   2070         row_info, png_bytep data)
   2071 
   2072 See pngtest.c for a working example.  Your function will be called
   2073 after all of the other transformations have been processed.  Take care with
   2074 interlaced images if you do the interlace yourself - the width of the row is the
   2075 width in 'row_info', not the overall image width.
   2076 
   2077 If supported, libpng provides two information routines that you can use to find
   2078 where you are in processing the image:
   2079 
   2080    png_get_current_pass_number(png_structp png_ptr);
   2081    png_get_current_row_number(png_structp png_ptr);
   2082 
   2083 Don't try using these outside a transform callback - firstly they are only
   2084 supported if user transforms are supported, secondly they may well return
   2085 unexpected results unless the row is actually being processed at the moment they
   2086 are called.
   2087 
   2088 With interlaced
   2089 images the value returned is the row in the input sub-image image.  Use
   2090 PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to
   2091 find the output pixel (x,y) given an interlaced sub-image pixel (row,col,pass).
   2092 
   2093 The discussion of interlace handling above contains more information on how to
   2094 use these values.
   2095 
   2096 You can also set up a pointer to a user structure for use by your
   2097 callback function, and you can inform libpng that your transform
   2098 function will change the number of channels or bit depth with the
   2099 function
   2100 
   2101     png_set_user_transform_info(png_ptr, user_ptr,
   2102         user_depth, user_channels);
   2103 
   2104 The user's application, not libpng, is responsible for allocating and
   2105 freeing any memory required for the user structure.
   2106 
   2107 You can retrieve the pointer via the function
   2108 png_get_user_transform_ptr().  For example:
   2109 
   2110     voidp read_user_transform_ptr =
   2111         png_get_user_transform_ptr(png_ptr);
   2112 
   2113 The last thing to handle is interlacing; this is covered in detail below,
   2114 but you must call the function here if you want libpng to handle expansion
   2115 of the interlaced image.
   2116 
   2117     number_of_passes = png_set_interlace_handling(png_ptr);
   2118 
   2119 After setting the transformations, libpng can update your png_info
   2120 structure to reflect any transformations you've requested with this
   2121 call.
   2122 
   2123     png_read_update_info(png_ptr, info_ptr);
   2124 
   2125 This is most useful to update the info structure's rowbytes
   2126 field so you can use it to allocate your image memory.  This function
   2127 will also update your palette with the correct screen_gamma and
   2128 background if these have been given with the calls above.  You may
   2129 only call png_read_update_info() once with a particular info_ptr.
   2130 
   2131 After you call png_read_update_info(), you can allocate any
   2132 memory you need to hold the image.  The row data is simply
   2133 raw byte data for all forms of images.  As the actual allocation
   2134 varies among applications, no example will be given.  If you
   2135 are allocating one large chunk, you will need to build an
   2136 array of pointers to each row, as it will be needed for some
   2137 of the functions below.
   2138 
   2139 Remember: Before you call png_read_update_info(), the png_get_*()
   2140 functions return the values corresponding to the original PNG image.
   2141 After you call png_read_update_info the values refer to the image
   2142 that libpng will output.  Consequently you must call all the png_set_
   2143 functions before you call png_read_update_info().  This is particularly
   2144 important for png_set_interlace_handling() - if you are going to call
   2145 png_read_update_info() you must call png_set_interlace_handling() before
   2146 it unless you want to receive interlaced output.
   2147 
   2148 Reading image data
   2149 
   2150 After you've allocated memory, you can read the image data.
   2151 The simplest way to do this is in one function call.  If you are
   2152 allocating enough memory to hold the whole image, you can just
   2153 call png_read_image() and libpng will read in all the image data
   2154 and put it in the memory area supplied.  You will need to pass in
   2155 an array of pointers to each row.
   2156 
   2157 This function automatically handles interlacing, so you don't
   2158 need to call png_set_interlace_handling() (unless you call
   2159 png_read_update_info()) or call this function multiple times, or any
   2160 of that other stuff necessary with png_read_rows().
   2161 
   2162    png_read_image(png_ptr, row_pointers);
   2163 
   2164 where row_pointers is:
   2165 
   2166    png_bytep row_pointers[height];
   2167 
   2168 You can point to void or char or whatever you use for pixels.
   2169 
   2170 If you don't want to read in the whole image at once, you can
   2171 use png_read_rows() instead.  If there is no interlacing (check
   2172 interlace_type == PNG_INTERLACE_NONE), this is simple:
   2173 
   2174     png_read_rows(png_ptr, row_pointers, NULL,
   2175         number_of_rows);
   2176 
   2177 where row_pointers is the same as in the png_read_image() call.
   2178 
   2179 If you are doing this just one row at a time, you can do this with
   2180 a single row_pointer instead of an array of row_pointers:
   2181 
   2182     png_bytep row_pointer = row;
   2183     png_read_row(png_ptr, row_pointer, NULL);
   2184 
   2185 If the file is interlaced (interlace_type != 0 in the IHDR chunk), things
   2186 get somewhat harder.  The only current (PNG Specification version 1.2)
   2187 interlacing type for PNG is (interlace_type == PNG_INTERLACE_ADAM7);
   2188 a somewhat complicated 2D interlace scheme, known as Adam7, that
   2189 breaks down an image into seven smaller images of varying size, based
   2190 on an 8x8 grid.  This number is defined (from libpng 1.5) as
   2191 PNG_INTERLACE_ADAM7_PASSES in png.h
   2192 
   2193 libpng can fill out those images or it can give them to you "as is".
   2194 It is almost always better to have libpng handle the interlacing for you.
   2195 If you want the images filled out, there are two ways to do that.  The one
   2196 mentioned in the PNG specification is to expand each pixel to cover
   2197 those pixels that have not been read yet (the "rectangle" method).
   2198 This results in a blocky image for the first pass, which gradually
   2199 smooths out as more pixels are read.  The other method is the "sparkle"
   2200 method, where pixels are drawn only in their final locations, with the
   2201 rest of the image remaining whatever colors they were initialized to
   2202 before the start of the read.  The first method usually looks better,
   2203 but tends to be slower, as there are more pixels to put in the rows.
   2204 
   2205 If, as is likely, you want libpng to expand the images, call this before
   2206 calling png_start_read_image() or png_read_update_info():
   2207 
   2208     if (interlace_type == PNG_INTERLACE_ADAM7)
   2209        number_of_passes
   2210            = png_set_interlace_handling(png_ptr);
   2211 
   2212 This will return the number of passes needed.  Currently, this is seven,
   2213 but may change if another interlace type is added.  This function can be
   2214 called even if the file is not interlaced, where it will return one pass.
   2215 You then need to read the whole image 'number_of_passes' times.  Each time
   2216 will distribute the pixels from the current pass to the correct place in
   2217 the output image, so you need to supply the same rows to png_read_rows in
   2218 each pass.
   2219 
   2220 If you are not going to display the image after each pass, but are
   2221 going to wait until the entire image is read in, use the sparkle
   2222 effect.  This effect is faster and the end result of either method
   2223 is exactly the same.  If you are planning on displaying the image
   2224 after each pass, the "rectangle" effect is generally considered the
   2225 better looking one.
   2226 
   2227 If you only want the "sparkle" effect, just call png_read_rows() as
   2228 normal, with the third parameter NULL.  Make sure you make pass over
   2229 the image number_of_passes times, and you don't change the data in the
   2230 rows between calls.  You can change the locations of the data, just
   2231 not the data.  Each pass only writes the pixels appropriate for that
   2232 pass, and assumes the data from previous passes is still valid.
   2233 
   2234     png_read_rows(png_ptr, row_pointers, NULL,
   2235         number_of_rows);
   2236 
   2237 If you only want the first effect (the rectangles), do the same as
   2238 before except pass the row buffer in the third parameter, and leave
   2239 the second parameter NULL.
   2240 
   2241     png_read_rows(png_ptr, NULL, row_pointers,
   2242         number_of_rows);
   2243 
   2244 If you don't want libpng to handle the interlacing details, just call
   2245 png_read_rows() PNG_INTERLACE_ADAM7_PASSES times to read in all the images.
   2246 Each of the images is a valid image by itself; however, you will almost
   2247 certainly need to distribute the pixels from each sub-image to the
   2248 correct place.  This is where everything gets very tricky.
   2249 
   2250 If you want to retrieve the separate images you must pass the correct
   2251 number of rows to each successive call of png_read_rows().  The calculation
   2252 gets pretty complicated for small images, where some sub-images may
   2253 not even exist because either their width or height ends up zero.
   2254 libpng provides two macros to help you in 1.5 and later versions:
   2255 
   2256    png_uint_32 width = PNG_PASS_COLS(image_width, pass_number);
   2257    png_uint_32 height = PNG_PASS_ROWS(image_height, pass_number);
   2258 
   2259 Respectively these tell you the width and height of the sub-image
   2260 corresponding to the numbered pass.  'pass' is in in the range 0 to 6 -
   2261 this can be confusing because the specification refers to the same passes
   2262 as 1 to 7!  Be careful, you must check both the width and height before
   2263 calling png_read_rows() and not call it for that pass if either is zero.
   2264 
   2265 You can, of course, read each sub-image row by row.  If you want to
   2266 produce optimal code to make a pixel-by-pixel transformation of an
   2267 interlaced image this is the best approach; read each row of each pass,
   2268 transform it, and write it out to a new interlaced image.
   2269 
   2270 If you want to de-interlace the image yourself libpng provides further
   2271 macros to help that tell you where to place the pixels in the output image.
   2272 Because the interlacing scheme is rectangular - sub-image pixels are always
   2273 arranged on a rectangular grid - all you need to know for each pass is the
   2274 starting column and row in the output image of the first pixel plus the
   2275 spacing between each pixel.  As of libpng 1.5 there are four macros to
   2276 retrieve this information:
   2277 
   2278    png_uint_32 x = PNG_PASS_START_COL(pass);
   2279    png_uint_32 y = PNG_PASS_START_ROW(pass);
   2280    png_uint_32 xStep = 1U << PNG_PASS_COL_SHIFT(pass);
   2281    png_uint_32 yStep = 1U << PNG_PASS_ROW_SHIFT(pass);
   2282 
   2283 These allow you to write the obvious loop:
   2284 
   2285    png_uint_32 input_y = 0;
   2286    png_uint_32 output_y = PNG_PASS_START_ROW(pass);
   2287 
   2288    while (output_y < output_image_height)
   2289    {
   2290       png_uint_32 input_x = 0;
   2291       png_uint_32 output_x = PNG_PASS_START_COL(pass);
   2292 
   2293       while (output_x < output_image_width)
   2294       {
   2295          image[output_y][output_x] =
   2296              subimage[pass][input_y][input_x++];
   2297 
   2298          output_x += xStep;
   2299       }
   2300 
   2301       ++input_y;
   2302       output_y += yStep;
   2303    }
   2304 
   2305 Notice that the steps between successive output rows and columns are
   2306 returned as shifts.  This is possible because the pixels in the subimages
   2307 are always a power of 2 apart - 1, 2, 4 or 8 pixels - in the original
   2308 image.  In practice you may need to directly calculate the output coordinate
   2309 given an input coordinate.  libpng provides two further macros for this
   2310 purpose:
   2311 
   2312    png_uint_32 output_x = PNG_COL_FROM_PASS_COL(input_x, pass);
   2313    png_uint_32 output_y = PNG_ROW_FROM_PASS_ROW(input_y, pass);
   2314 
   2315 Finally a pair of macros are provided to tell you if a particular image
   2316 row or column appears in a given pass:
   2317 
   2318    int col_in_pass = PNG_COL_IN_INTERLACE_PASS(output_x, pass);
   2319    int row_in_pass = PNG_ROW_IN_INTERLACE_PASS(output_y, pass);
   2320 
   2321 Bear in mind that you will probably also need to check the width and height
   2322 of the pass in addition to the above to be sure the pass even exists!
   2323 
   2324 With any luck you are convinced by now that you don't want to do your own
   2325 interlace handling.  In reality normally the only good reason for doing this
   2326 is if you are processing PNG files on a pixel-by-pixel basis and don't want
   2327 to load the whole file into memory when it is interlaced.
   2328 
   2329 libpng includes a test program, pngvalid, that illustrates reading and
   2330 writing of interlaced images.  If you can't get interlacing to work in your
   2331 code and don't want to leave it to libpng (the recommended approach), see
   2332 how pngvalid.c does it.
   2333 
   2334 Finishing a sequential read
   2335 
   2336 After you are finished reading the image through the
   2337 low-level interface, you can finish reading the file.
   2338 
   2339 If you want to use a different crc action for handling CRC errors in
   2340 chunks after the image data, you can call png_set_crc_action()
   2341 again at this point.
   2342 
   2343 If you are interested in comments or time, which may be stored either
   2344 before or after the image data, you should pass the separate png_info
   2345 struct if you want to keep the comments from before and after the image
   2346 separate.
   2347 
   2348     png_infop end_info = png_create_info_struct(png_ptr);
   2349 
   2350     if (!end_info)
   2351     {
   2352        png_destroy_read_struct(&png_ptr, &info_ptr,
   2353            (png_infopp)NULL);
   2354        return (ERROR);
   2355     }
   2356 
   2357    png_read_end(png_ptr, end_info);
   2358 
   2359 If you are not interested, you should still call png_read_end()
   2360 but you can pass NULL, avoiding the need to create an end_info structure.
   2361 If you do this, libpng will not process any chunks after IDAT other than
   2362 skipping over them and perhaps (depending on whether you have called
   2363 png_set_crc_action) checking their CRCs while looking for the IEND chunk.
   2364 
   2365    png_read_end(png_ptr, (png_infop)NULL);
   2366 
   2367 If you don't call png_read_end(), then your file pointer will be
   2368 left pointing to the first chunk after the last IDAT, which is probably
   2369 not what you want if you expect to read something beyond the end of
   2370 the PNG datastream.
   2371 
   2372 When you are done, you can free all memory allocated by libpng like this:
   2373 
   2374    png_destroy_read_struct(&png_ptr, &info_ptr,
   2375        &end_info);
   2376 
   2377 or, if you didn't create an end_info structure,
   2378 
   2379    png_destroy_read_struct(&png_ptr, &info_ptr,
   2380        (png_infopp)NULL);
   2381 
   2382 It is also possible to individually free the info_ptr members that
   2383 point to libpng-allocated storage with the following function:
   2384 
   2385     png_free_data(png_ptr, info_ptr, mask, seq)
   2386 
   2387     mask - identifies data to be freed, a mask
   2388            containing the bitwise OR of one or
   2389            more of
   2390              PNG_FREE_PLTE, PNG_FREE_TRNS,
   2391              PNG_FREE_HIST, PNG_FREE_ICCP,
   2392              PNG_FREE_PCAL, PNG_FREE_ROWS,
   2393              PNG_FREE_SCAL, PNG_FREE_SPLT,
   2394              PNG_FREE_TEXT, PNG_FREE_UNKN,
   2395            or simply PNG_FREE_ALL
   2396 
   2397     seq  - sequence number of item to be freed
   2398            (-1 for all items)
   2399 
   2400 This function may be safely called when the relevant storage has
   2401 already been freed, or has not yet been allocated, or was allocated
   2402 by the user and not by libpng,  and will in those cases do nothing.
   2403 The "seq" parameter is ignored if only one item of the selected data
   2404 type, such as PLTE, is allowed.  If "seq" is not -1, and multiple items
   2405 are allowed for the data type identified in the mask, such as text or
   2406 sPLT, only the n'th item in the structure is freed, where n is "seq".
   2407 
   2408 The default behavior is only to free data that was allocated internally
   2409 by libpng.  This can be changed, so that libpng will not free the data,
   2410 or so that it will free data that was allocated by the user with png_malloc()
   2411 or png_calloc() and passed in via a png_set_*() function, with
   2412 
   2413     png_data_freer(png_ptr, info_ptr, freer, mask)
   2414 
   2415     freer  - one of
   2416                PNG_DESTROY_WILL_FREE_DATA
   2417                PNG_SET_WILL_FREE_DATA
   2418                PNG_USER_WILL_FREE_DATA
   2419 
   2420     mask   - which data elements are affected
   2421              same choices as in png_free_data()
   2422 
   2423 This function only affects data that has already been allocated.
   2424 You can call this function after reading the PNG data but before calling
   2425 any png_set_*() functions, to control whether the user or the png_set_*()
   2426 function is responsible for freeing any existing data that might be present,
   2427 and again after the png_set_*() functions to control whether the user
   2428 or png_destroy_*() is supposed to free the data.  When the user assumes
   2429 responsibility for libpng-allocated data, the application must use
   2430 png_free() to free it, and when the user transfers responsibility to libpng
   2431 for data that the user has allocated, the user must have used png_malloc()
   2432 or png_calloc() to allocate it.
   2433 
   2434 If you allocated your row_pointers in a single block, as suggested above in
   2435 the description of the high level read interface, you must not transfer
   2436 responsibility for freeing it to the png_set_rows or png_read_destroy function,
   2437 because they would also try to free the individual row_pointers[i].
   2438 
   2439 If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword
   2440 separately, do not transfer responsibility for freeing text_ptr to libpng,
   2441 because when libpng fills a png_text structure it combines these members with
   2442 the key member, and png_free_data() will free only text_ptr.key.  Similarly,
   2443 if you transfer responsibility for free'ing text_ptr from libpng to your
   2444 application, your application must not separately free those members.
   2445 
   2446 The png_free_data() function will turn off the "valid" flag for anything
   2447 it frees.  If you need to turn the flag off for a chunk that was freed by
   2448 your application instead of by libpng, you can use
   2449 
   2450     png_set_invalid(png_ptr, info_ptr, mask);
   2451 
   2452     mask - identifies the chunks to be made invalid,
   2453            containing the bitwise OR of one or
   2454            more of
   2455              PNG_INFO_gAMA, PNG_INFO_sBIT,
   2456              PNG_INFO_cHRM, PNG_INFO_PLTE,
   2457              PNG_INFO_tRNS, PNG_INFO_bKGD,
   2458              PNG_INFO_hIST, PNG_INFO_pHYs,
   2459              PNG_INFO_oFFs, PNG_INFO_tIME,
   2460              PNG_INFO_pCAL, PNG_INFO_sRGB,
   2461              PNG_INFO_iCCP, PNG_INFO_sPLT,
   2462              PNG_INFO_sCAL, PNG_INFO_IDAT
   2463 
   2464 For a more compact example of reading a PNG image, see the file example.c.
   2465 
   2466 Reading PNG files progressively
   2467 
   2468 The progressive reader is slightly different from the non-progressive
   2469 reader.  Instead of calling png_read_info(), png_read_rows(), and
   2470 png_read_end(), you make one call to png_process_data(), which calls
   2471 callbacks when it has the info, a row, or the end of the image.  You
   2472 set up these callbacks with png_set_progressive_read_fn().  You don't
   2473 have to worry about the input/output functions of libpng, as you are
   2474 giving the library the data directly in png_process_data().  I will
   2475 assume that you have read the section on reading PNG files above,
   2476 so I will only highlight the differences (although I will show
   2477 all of the code).
   2478 
   2479 png_structp png_ptr;
   2480 png_infop info_ptr;
   2481 
   2482  /*  An example code fragment of how you would
   2483      initialize the progressive reader in your
   2484      application. */
   2485  int
   2486  initialize_png_reader()
   2487  {
   2488     png_ptr = png_create_read_struct
   2489         (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
   2490          user_error_fn, user_warning_fn);
   2491 
   2492     if (!png_ptr)
   2493         return (ERROR);
   2494 
   2495     info_ptr = png_create_info_struct(png_ptr);
   2496 
   2497     if (!info_ptr)
   2498     {
   2499        png_destroy_read_struct(&png_ptr,
   2500           (png_infopp)NULL, (png_infopp)NULL);
   2501        return (ERROR);
   2502     }
   2503 
   2504     if (setjmp(png_jmpbuf(png_ptr)))
   2505     {
   2506        png_destroy_read_struct(&png_ptr, &info_ptr,
   2507           (png_infopp)NULL);
   2508        return (ERROR);
   2509     }
   2510 
   2511     /* This one's new.  You can provide functions
   2512        to be called when the header info is valid,
   2513        when each row is completed, and when the image
   2514        is finished.  If you aren't using all functions,
   2515        you can specify NULL parameters.  Even when all
   2516        three functions are NULL, you need to call
   2517        png_set_progressive_read_fn().  You can use
   2518        any struct as the user_ptr (cast to a void pointer
   2519        for the function call), and retrieve the pointer
   2520        from inside the callbacks using the function
   2521 
   2522           png_get_progressive_ptr(png_ptr);
   2523 
   2524        which will return a void pointer, which you have
   2525        to cast appropriately.
   2526      */
   2527     png_set_progressive_read_fn(png_ptr, (void *)user_ptr,
   2528         info_callback, row_callback, end_callback);
   2529 
   2530     return 0;
   2531  }
   2532 
   2533  /* A code fragment that you call as you receive blocks
   2534    of data */
   2535  int
   2536  process_data(png_bytep buffer, png_uint_32 length)
   2537  {
   2538     if (setjmp(png_jmpbuf(png_ptr)))
   2539     {
   2540        png_destroy_read_struct(&png_ptr, &info_ptr,
   2541            (png_infopp)NULL);
   2542        return (ERROR);
   2543     }
   2544 
   2545     /* This one's new also.  Simply give it a chunk
   2546        of data from the file stream (in order, of
   2547        course).  On machines with segmented memory
   2548        models machines, don't give it any more than
   2549        64K.  The library seems to run fine with sizes
   2550        of 4K. Although you can give it much less if
   2551        necessary (I assume you can give it chunks of
   2552        1 byte, I haven't tried less then 256 bytes
   2553        yet).  When this function returns, you may
   2554        want to display any rows that were generated
   2555        in the row callback if you don't already do
   2556        so there.
   2557      */
   2558     png_process_data(png_ptr, info_ptr, buffer, length);
   2559 
   2560     /* At this point you can call png_process_data_skip if
   2561        you want to handle data the library will skip yourself;
   2562        it simply returns the number of bytes to skip (and stops
   2563        libpng skipping that number of bytes on the next
   2564        png_process_data call).
   2565     return 0;
   2566  }
   2567 
   2568  /* This function is called (as set by
   2569     png_set_progressive_read_fn() above) when enough data
   2570     has been supplied so all of the header has been
   2571     read.
   2572  */
   2573  void
   2574  info_callback(png_structp png_ptr, png_infop info)
   2575  {
   2576     /* Do any setup here, including setting any of
   2577        the transformations mentioned in the Reading
   2578        PNG files section.  For now, you _must_ call
   2579        either png_start_read_image() or
   2580        png_read_update_info() after all the
   2581        transformations are set (even if you don't set
   2582        any).  You may start getting rows before
   2583        png_process_data() returns, so this is your
   2584        last chance to prepare for that.
   2585 
   2586        This is where you turn on interlace handling,
   2587        assuming you don't want to do it yourself.
   2588 
   2589        If you need to you can stop the processing of
   2590        your original input data at this point by calling
   2591        png_process_data_pause.  This returns the number
   2592        of unprocessed bytes from the last png_process_data
   2593        call - it is up to you to ensure that the next call
   2594        sees these bytes again.  If you don't want to bother
   2595        with this you can get libpng to cache the unread
   2596        bytes by setting the 'save' parameter (see png.h) but
   2597        then libpng will have to copy the data internally.
   2598      */
   2599  }
   2600 
   2601  /* This function is called when each row of image
   2602     data is complete */
   2603  void
   2604  row_callback(png_structp png_ptr, png_bytep new_row,
   2605     png_uint_32 row_num, int pass)
   2606  {
   2607     /* If the image is interlaced, and you turned
   2608        on the interlace handler, this function will
   2609        be called for every row in every pass.  Some
   2610        of these rows will not be changed from the
   2611        previous pass.  When the row is not changed,
   2612        the new_row variable will be NULL.  The rows
   2613        and passes are called in order, so you don't
   2614        really need the row_num and pass, but I'm
   2615        supplying them because it may make your life
   2616        easier.
   2617 
   2618        If you did not turn on interlace handling then
   2619        the callback is called for each row of each
   2620        sub-image when the image is interlaced.  In this
   2621        case 'row_num' is the row in the sub-image, not
   2622        the row in the output image as it is in all other
   2623        cases.
   2624 
   2625        For the non-NULL rows of interlaced images when
   2626        you have switched on libpng interlace handling,
   2627        you must call png_progressive_combine_row()
   2628        passing in the row and the old row.  You can
   2629        call this function for NULL rows (it will just
   2630        return) and for non-interlaced images (it just
   2631        does the memcpy for you) if it will make the
   2632        code easier.  Thus, you can just do this for
   2633        all cases if you switch on interlace handling;
   2634      */
   2635 
   2636         png_progressive_combine_row(png_ptr, old_row,
   2637           new_row);
   2638 
   2639     /* where old_row is what was displayed for
   2640        previously for the row.  Note that the first
   2641        pass (pass == 0, really) will completely cover
   2642        the old row, so the rows do not have to be
   2643        initialized.  After the first pass (and only
   2644        for interlaced images), you will have to pass
   2645        the current row, and the function will combine
   2646        the old row and the new row.
   2647 
   2648        You can also call png_process_data_pause in this
   2649        callback - see above.
   2650     */
   2651  }
   2652 
   2653  void
   2654  end_callback(png_structp png_ptr, png_infop info)
   2655  {
   2656     /* This function is called after the whole image
   2657        has been read, including any chunks after the
   2658        image (up to and including the IEND).  You
   2659        will usually have the same info chunk as you
   2660        had in the header, although some data may have
   2661        been added to the comments and time fields.
   2662 
   2663        Most people won't do much here, perhaps setting
   2664        a flag that marks the image as finished.
   2665      */
   2666  }
   2667 
   2668 
   2669 
   2670 IV. Writing
   2671 
   2672 Much of this is very similar to reading.  However, everything of
   2673 importance is repeated here, so you won't have to constantly look
   2674 back up in the reading section to understand writing.
   2675 
   2676 Setup
   2677 
   2678 You will want to do the I/O initialization before you get into libpng,
   2679 so if it doesn't work, you don't have anything to undo. If you are not
   2680 using the standard I/O functions, you will need to replace them with
   2681 custom writing functions.  See the discussion under Customizing libpng.
   2682 
   2683     FILE *fp = fopen(file_name, "wb");
   2684 
   2685     if (!fp)
   2686        return (ERROR);
   2687 
   2688 Next, png_struct and png_info need to be allocated and initialized.
   2689 As these can be both relatively large, you may not want to store these
   2690 on the stack, unless you have stack space to spare.  Of course, you
   2691 will want to check if they return NULL.  If you are also reading,
   2692 you won't want to name your read structure and your write structure
   2693 both "png_ptr"; you can call them anything you like, such as
   2694 "read_ptr" and "write_ptr".  Look at pngtest.c, for example.
   2695 
   2696     png_structp png_ptr = png_create_write_struct
   2697        (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
   2698         user_error_fn, user_warning_fn);
   2699 
   2700     if (!png_ptr)
   2701        return (ERROR);
   2702 
   2703     png_infop info_ptr = png_create_info_struct(png_ptr);
   2704     if (!info_ptr)
   2705     {
   2706        png_destroy_write_struct(&png_ptr,
   2707            (png_infopp)NULL);
   2708        return (ERROR);
   2709     }
   2710 
   2711 If you want to use your own memory allocation routines,
   2712 define PNG_USER_MEM_SUPPORTED and use
   2713 png_create_write_struct_2() instead of png_create_write_struct():
   2714 
   2715     png_structp png_ptr = png_create_write_struct_2
   2716        (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
   2717         user_error_fn, user_warning_fn, (png_voidp)
   2718         user_mem_ptr, user_malloc_fn, user_free_fn);
   2719 
   2720 After you have these structures, you will need to set up the
   2721 error handling.  When libpng encounters an error, it expects to
   2722 longjmp() back to your routine.  Therefore, you will need to call
   2723 setjmp() and pass the png_jmpbuf(png_ptr).  If you
   2724 write the file from different routines, you will need to update
   2725 the png_jmpbuf(png_ptr) every time you enter a new routine that will
   2726 call a png_*() function.  See your documentation of setjmp/longjmp
   2727 for your compiler for more information on setjmp/longjmp.  See
   2728 the discussion on libpng error handling in the Customizing Libpng
   2729 section below for more information on the libpng error handling.
   2730 
   2731     if (setjmp(png_jmpbuf(png_ptr)))
   2732     {
   2733     png_destroy_write_struct(&png_ptr, &info_ptr);
   2734        fclose(fp);
   2735        return (ERROR);
   2736     }
   2737     ...
   2738     return;
   2739 
   2740 If you would rather avoid the complexity of setjmp/longjmp issues,
   2741 you can compile libpng with PNG_NO_SETJMP, in which case
   2742 errors will result in a call to PNG_ABORT() which defaults to abort().
   2743 
   2744 You can #define PNG_ABORT() to a function that does something
   2745 more useful than abort(), as long as your function does not
   2746 return.
   2747 
   2748 Checking for invalid palette index on write was added at libpng
   2749 1.5.10.  If a pixel contains an invalid (out-of-range) index libpng issues
   2750 a benign error.  This is enabled by default because this condition is an
   2751 error according to the PNG specification, Clause 11.3.2, but the error can
   2752 be ignored in each png_ptr with
   2753 
   2754    png_set_check_for_invalid_index(png_ptr, 0);
   2755 
   2756 If the error is ignored, or if png_benign_error() treats it as a warning,
   2757 any invalid pixels are written as-is by the encoder, resulting in an
   2758 invalid PNG datastream as output.  In this case the application is
   2759 responsible for ensuring that the pixel indexes are in range when it writes
   2760 a PLTE chunk with fewer entries than the bit depth would allow.
   2761 
   2762 Now you need to set up the output code.  The default for libpng is to
   2763 use the C function fwrite().  If you use this, you will need to pass a
   2764 valid FILE * in the function png_init_io().  Be sure that the file is
   2765 opened in binary mode.  Again, if you wish to handle writing data in
   2766 another way, see the discussion on libpng I/O handling in the Customizing
   2767 Libpng section below.
   2768 
   2769     png_init_io(png_ptr, fp);
   2770 
   2771 If you are embedding your PNG into a datastream such as MNG, and don't
   2772 want libpng to write the 8-byte signature, or if you have already
   2773 written the signature in your application, use
   2774 
   2775     png_set_sig_bytes(png_ptr, 8);
   2776 
   2777 to inform libpng that it should not write a signature.
   2778 
   2779 Write callbacks
   2780 
   2781 At this point, you can set up a callback function that will be
   2782 called after each row has been written, which you can use to control
   2783 a progress meter or the like.  It's demonstrated in pngtest.c.
   2784 You must supply a function
   2785 
   2786     void write_row_callback(png_structp png_ptr, png_uint_32 row,
   2787        int pass);
   2788     {
   2789       /* put your code here */
   2790     }
   2791 
   2792 (You can give it another name that you like instead of "write_row_callback")
   2793 
   2794 To inform libpng about your function, use
   2795 
   2796     png_set_write_status_fn(png_ptr, write_row_callback);
   2797 
   2798 When this function is called the row has already been completely processed and
   2799 it has also been written out.  The 'row' and 'pass' refer to the next row to be
   2800 handled.  For the
   2801 non-interlaced case the row that was just handled is simply one less than the
   2802 passed in row number, and pass will always be 0.  For the interlaced case the
   2803 same applies unless the row value is 0, in which case the row just handled was
   2804 the last one from one of the preceding passes.  Because interlacing may skip a
   2805 pass you cannot be sure that the preceding pass is just 'pass-1', if you really
   2806 need to know what the last pass is record (row,pass) from the callback and use
   2807 the last recorded value each time.
   2808 
   2809 As with the user transform you can find the output row using the
   2810 PNG_ROW_FROM_PASS_ROW macro.
   2811 
   2812 You now have the option of modifying how the compression library will
   2813 run.  The following functions are mainly for testing, but may be useful
   2814 in some cases, like if you need to write PNG files extremely fast and
   2815 are willing to give up some compression, or if you want to get the
   2816 maximum possible compression at the expense of slower writing.  If you
   2817 have no special needs in this area, let the library do what it wants by
   2818 not calling this function at all, as it has been tuned to deliver a good
   2819 speed/compression ratio. The second parameter to png_set_filter() is
   2820 the filter method, for which the only valid values are 0 (as of the
   2821 July 1999 PNG specification, version 1.2) or 64 (if you are writing
   2822 a PNG datastream that is to be embedded in a MNG datastream).  The third
   2823 parameter is a flag that indicates which filter type(s) are to be tested
   2824 for each scanline.  See the PNG specification for details on the specific
   2825 filter types.
   2826 
   2827 
   2828     /* turn on or off filtering, and/or choose
   2829        specific filters.  You can use either a single
   2830        PNG_FILTER_VALUE_NAME or the bitwise OR of one
   2831        or more PNG_FILTER_NAME masks.
   2832      */
   2833     png_set_filter(png_ptr, 0,
   2834        PNG_FILTER_NONE  | PNG_FILTER_VALUE_NONE |
   2835        PNG_FILTER_SUB   | PNG_FILTER_VALUE_SUB  |
   2836        PNG_FILTER_UP    | PNG_FILTER_VALUE_UP   |
   2837        PNG_FILTER_AVG   | PNG_FILTER_VALUE_AVG  |
   2838        PNG_FILTER_PAETH | PNG_FILTER_VALUE_PAETH|
   2839        PNG_ALL_FILTERS);
   2840 
   2841 If an application wants to start and stop using particular filters during
   2842 compression, it should start out with all of the filters (to ensure that
   2843 the previous row of pixels will be stored in case it's needed later),
   2844 and then add and remove them after the start of compression.
   2845 
   2846 If you are writing a PNG datastream that is to be embedded in a MNG
   2847 datastream, the second parameter can be either 0 or 64.
   2848 
   2849 The png_set_compression_*() functions interface to the zlib compression
   2850 library, and should mostly be ignored unless you really know what you are
   2851 doing.  The only generally useful call is png_set_compression_level()
   2852 which changes how much time zlib spends on trying to compress the image
   2853 data.  See the Compression Library (zlib.h and algorithm.txt, distributed
   2854 with zlib) for details on the compression levels.
   2855 
   2856     #include zlib.h
   2857 
   2858     /* Set the zlib compression level */
   2859     png_set_compression_level(png_ptr,
   2860         Z_BEST_COMPRESSION);
   2861 
   2862     /* Set other zlib parameters for compressing IDAT */
   2863     png_set_compression_mem_level(png_ptr, 8);
   2864     png_set_compression_strategy(png_ptr,
   2865         Z_DEFAULT_STRATEGY);
   2866     png_set_compression_window_bits(png_ptr, 15);
   2867     png_set_compression_method(png_ptr, 8);
   2868     png_set_compression_buffer_size(png_ptr, 8192)
   2869 
   2870     /* Set zlib parameters for text compression
   2871      * If you don't call these, the parameters
   2872      * fall back on those defined for IDAT chunks
   2873      */
   2874     png_set_text_compression_mem_level(png_ptr, 8);
   2875     png_set_text_compression_strategy(png_ptr,
   2876         Z_DEFAULT_STRATEGY);
   2877     png_set_text_compression_window_bits(png_ptr, 15);
   2878     png_set_text_compression_method(png_ptr, 8);
   2879 
   2880 Setting the contents of info for output
   2881 
   2882 You now need to fill in the png_info structure with all the data you
   2883 wish to write before the actual image.  Note that the only thing you
   2884 are allowed to write after the image is the text chunks and the time
   2885 chunk (as of PNG Specification 1.2, anyway).  See png_write_end() and
   2886 the latest PNG specification for more information on that.  If you
   2887 wish to write them before the image, fill them in now, and flag that
   2888 data as being valid.  If you want to wait until after the data, don't
   2889 fill them until png_write_end().  For all the fields in png_info and
   2890 their data types, see png.h.  For explanations of what the fields
   2891 contain, see the PNG specification.
   2892 
   2893 Some of the more important parts of the png_info are:
   2894 
   2895     png_set_IHDR(png_ptr, info_ptr, width, height,
   2896        bit_depth, color_type, interlace_type,
   2897        compression_type, filter_method)
   2898 
   2899     width          - holds the width of the image
   2900                      in pixels (up to 2^31).
   2901 
   2902     height         - holds the height of the image
   2903                      in pixels (up to 2^31).
   2904 
   2905     bit_depth      - holds the bit depth of one of the
   2906                      image channels.
   2907                      (valid values are 1, 2, 4, 8, 16
   2908                      and depend also on the
   2909                      color_type.  See also significant
   2910                      bits (sBIT) below).
   2911 
   2912     color_type     - describes which color/alpha
   2913                      channels are present.
   2914                      PNG_COLOR_TYPE_GRAY
   2915                         (bit depths 1, 2, 4, 8, 16)
   2916                      PNG_COLOR_TYPE_GRAY_ALPHA
   2917                         (bit depths 8, 16)
   2918                      PNG_COLOR_TYPE_PALETTE
   2919                         (bit depths 1, 2, 4, 8)
   2920                      PNG_COLOR_TYPE_RGB
   2921                         (bit_depths 8, 16)
   2922                      PNG_COLOR_TYPE_RGB_ALPHA
   2923                         (bit_depths 8, 16)
   2924 
   2925                      PNG_COLOR_MASK_PALETTE
   2926                      PNG_COLOR_MASK_COLOR
   2927                      PNG_COLOR_MASK_ALPHA
   2928 
   2929     interlace_type - PNG_INTERLACE_NONE or
   2930                      PNG_INTERLACE_ADAM7
   2931 
   2932     compression_type - (must be
   2933                      PNG_COMPRESSION_TYPE_DEFAULT)
   2934 
   2935     filter_method  - (must be PNG_FILTER_TYPE_DEFAULT
   2936                      or, if you are writing a PNG to
   2937                      be embedded in a MNG datastream,
   2938                      can also be
   2939                      PNG_INTRAPIXEL_DIFFERENCING)
   2940 
   2941 If you call png_set_IHDR(), the call must appear before any of the
   2942 other png_set_*() functions, because they might require access to some of
   2943 the IHDR settings.  The remaining png_set_*() functions can be called
   2944 in any order.
   2945 
   2946 If you wish, you can reset the compression_type, interlace_type, or
   2947 filter_method later by calling png_set_IHDR() again; if you do this, the
   2948 width, height, bit_depth, and color_type must be the same in each call.
   2949 
   2950     png_set_PLTE(png_ptr, info_ptr, palette,
   2951        num_palette);
   2952 
   2953     palette        - the palette for the file
   2954                      (array of png_color)
   2955     num_palette    - number of entries in the palette
   2956 
   2957     png_set_gAMA(png_ptr, info_ptr, file_gamma);
   2958     png_set_gAMA_fixed(png_ptr, info_ptr, int_file_gamma);
   2959 
   2960     file_gamma     - the gamma at which the image was
   2961                      created (PNG_INFO_gAMA)
   2962 
   2963     int_file_gamma - 100,000 times the gamma at which
   2964                      the image was created
   2965 
   2966     png_set_cHRM(png_ptr, info_ptr,  white_x, white_y, red_x, red_y,
   2967                      green_x, green_y, blue_x, blue_y)
   2968     png_set_cHRM_XYZ(png_ptr, info_ptr, red_X, red_Y, red_Z, green_X,
   2969                      green_Y, green_Z, blue_X, blue_Y, blue_Z)
   2970     png_set_cHRM_fixed(png_ptr, info_ptr, int_white_x, int_white_y,
   2971                      int_red_x, int_red_y, int_green_x, int_green_y,
   2972                      int_blue_x, int_blue_y)
   2973     png_set_cHRM_XYZ_fixed(png_ptr, info_ptr, int_red_X, int_red_Y,
   2974                      int_red_Z, int_green_X, int_green_Y, int_green_Z,
   2975                      int_blue_X, int_blue_Y, int_blue_Z)
   2976 
   2977     {white,red,green,blue}_{x,y}
   2978                      A color space encoding specified using the chromaticities
   2979                      of the end points and the white point.
   2980 
   2981     {red,green,blue}_{X,Y,Z}
   2982                      A color space encoding specified using the encoding end
   2983                      points - the CIE tristimulus specification of the intended
   2984                      color of the red, green and blue channels in the PNG RGB
   2985                      data.  The white point is simply the sum of the three end
   2986                      points.
   2987 
   2988     png_set_sRGB(png_ptr, info_ptr, srgb_intent);
   2989 
   2990     srgb_intent    - the rendering intent
   2991                      (PNG_INFO_sRGB) The presence of
   2992                      the sRGB chunk means that the pixel
   2993                      data is in the sRGB color space.
   2994                      This chunk also implies specific
   2995                      values of gAMA and cHRM.  Rendering
   2996                      intent is the CSS-1 property that
   2997                      has been defined by the International
   2998                      Color Consortium
   2999                      (http://www.color.org).
   3000                      It can be one of
   3001                      PNG_sRGB_INTENT_SATURATION,
   3002                      PNG_sRGB_INTENT_PERCEPTUAL,
   3003                      PNG_sRGB_INTENT_ABSOLUTE, or
   3004                      PNG_sRGB_INTENT_RELATIVE.
   3005 
   3006 
   3007     png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr,
   3008        srgb_intent);
   3009 
   3010     srgb_intent    - the rendering intent
   3011                      (PNG_INFO_sRGB) The presence of the
   3012                      sRGB chunk means that the pixel
   3013                      data is in the sRGB color space.
   3014                      This function also causes gAMA and
   3015                      cHRM chunks with the specific values
   3016                      that are consistent with sRGB to be
   3017                      written.
   3018 
   3019     png_set_iCCP(png_ptr, info_ptr, name, compression_type,
   3020                        profile, proflen);
   3021 
   3022     name             - The profile name.
   3023 
   3024     compression_type - The compression type; always
   3025                        PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
   3026                        You may give NULL to this argument to
   3027                        ignore it.
   3028 
   3029     profile          - International Color Consortium color
   3030                        profile data. May contain NULs.
   3031 
   3032     proflen          - length of profile data in bytes.
   3033 
   3034     png_set_sBIT(png_ptr, info_ptr, sig_bit);
   3035 
   3036     sig_bit        - the number of significant bits for
   3037                      (PNG_INFO_sBIT) each of the gray, red,
   3038                      green, and blue channels, whichever are
   3039                      appropriate for the given color type
   3040                      (png_color_16)
   3041 
   3042     png_set_tRNS(png_ptr, info_ptr, trans_alpha,
   3043        num_trans, trans_color);
   3044 
   3045     trans_alpha    - array of alpha (transparency)
   3046                      entries for palette (PNG_INFO_tRNS)
   3047 
   3048     num_trans      - number of transparent entries
   3049                      (PNG_INFO_tRNS)
   3050 
   3051     trans_color    - graylevel or color sample values
   3052                      (in order red, green, blue) of the
   3053                      single transparent color for
   3054                      non-paletted images (PNG_INFO_tRNS)
   3055 
   3056     png_set_hIST(png_ptr, info_ptr, hist);
   3057 
   3058     hist           - histogram of palette (array of
   3059                      png_uint_16) (PNG_INFO_hIST)
   3060 
   3061     png_set_tIME(png_ptr, info_ptr, mod_time);
   3062 
   3063     mod_time       - time image was last modified
   3064                      (PNG_VALID_tIME)
   3065 
   3066     png_set_bKGD(png_ptr, info_ptr, background);
   3067 
   3068     background     - background color (of type
   3069                      png_color_16p) (PNG_VALID_bKGD)
   3070 
   3071     png_set_text(png_ptr, info_ptr, text_ptr, num_text);
   3072 
   3073     text_ptr       - array of png_text holding image
   3074                      comments
   3075 
   3076     text_ptr[i].compression - type of compression used
   3077                  on "text" PNG_TEXT_COMPRESSION_NONE
   3078                            PNG_TEXT_COMPRESSION_zTXt
   3079                            PNG_ITXT_COMPRESSION_NONE
   3080                            PNG_ITXT_COMPRESSION_zTXt
   3081     text_ptr[i].key   - keyword for comment.  Must contain
   3082                  1-79 characters.
   3083     text_ptr[i].text  - text comments for current
   3084                          keyword.  Can be NULL or empty.
   3085     text_ptr[i].text_length - length of text string,
   3086                  after decompression, 0 for iTXt
   3087     text_ptr[i].itxt_length - length of itxt string,
   3088                  after decompression, 0 for tEXt/zTXt
   3089     text_ptr[i].lang  - language of comment (NULL or
   3090                          empty for unknown).
   3091     text_ptr[i].translated_keyword  - keyword in UTF-8 (NULL
   3092                          or empty for unknown).
   3093 
   3094     Note that the itxt_length, lang, and lang_key
   3095     members of the text_ptr structure only exist when the
   3096     library is built with iTXt chunk support.  Prior to
   3097     libpng-1.4.0 the library was built by default without
   3098     iTXt support. Also note that when iTXt is supported,
   3099     they contain NULL pointers when the "compression"
   3100     field contains PNG_TEXT_COMPRESSION_NONE or
   3101     PNG_TEXT_COMPRESSION_zTXt.
   3102 
   3103     num_text       - number of comments
   3104 
   3105     png_set_sPLT(png_ptr, info_ptr, &palette_ptr,
   3106        num_spalettes);
   3107 
   3108     palette_ptr    - array of png_sPLT_struct structures
   3109                      to be added to the list of palettes
   3110                      in the info structure.
   3111     num_spalettes  - number of palette structures to be
   3112                      added.
   3113 
   3114     png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y,
   3115         unit_type);
   3116 
   3117     offset_x  - positive offset from the left
   3118                      edge of the screen
   3119 
   3120     offset_y  - positive offset from the top
   3121                      edge of the screen
   3122 
   3123     unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
   3124 
   3125     png_set_pHYs(png_ptr, info_ptr, res_x, res_y,
   3126         unit_type);
   3127 
   3128     res_x       - pixels/unit physical resolution
   3129                   in x direction
   3130 
   3131     res_y       - pixels/unit physical resolution
   3132                   in y direction
   3133 
   3134     unit_type   - PNG_RESOLUTION_UNKNOWN,
   3135                   PNG_RESOLUTION_METER
   3136 
   3137     png_set_sCAL(png_ptr, info_ptr, unit, width, height)
   3138 
   3139     unit        - physical scale units (an integer)
   3140 
   3141     width       - width of a pixel in physical scale units
   3142 
   3143     height      - height of a pixel in physical scale units
   3144                   (width and height are doubles)
   3145 
   3146     png_set_sCAL_s(png_ptr, info_ptr, unit, width, height)
   3147 
   3148     unit        - physical scale units (an integer)
   3149 
   3150     width       - width of a pixel in physical scale units
   3151                   expressed as a string
   3152 
   3153     height      - height of a pixel in physical scale units
   3154                  (width and height are strings like "2.54")
   3155 
   3156     png_set_unknown_chunks(png_ptr, info_ptr, &unknowns,
   3157        num_unknowns)
   3158 
   3159     unknowns          - array of png_unknown_chunk
   3160                         structures holding unknown chunks
   3161     unknowns[i].name  - name of unknown chunk
   3162     unknowns[i].data  - data of unknown chunk
   3163     unknowns[i].size  - size of unknown chunk's data
   3164     unknowns[i].location - position to write chunk in file
   3165                            0: do not write chunk
   3166                            PNG_HAVE_IHDR: before PLTE
   3167                            PNG_HAVE_PLTE: before IDAT
   3168                            PNG_AFTER_IDAT: after IDAT
   3169 
   3170 The "location" member is set automatically according to
   3171 what part of the output file has already been written.
   3172 You can change its value after calling png_set_unknown_chunks()
   3173 as demonstrated in pngtest.c.  Within each of the "locations",
   3174 the chunks are sequenced according to their position in the
   3175 structure (that is, the value of "i", which is the order in which
   3176 the chunk was either read from the input file or defined with
   3177 png_set_unknown_chunks).
   3178 
   3179 A quick word about text and num_text.  text is an array of png_text
   3180 structures.  num_text is the number of valid structures in the array.
   3181 Each png_text structure holds a language code, a keyword, a text value,
   3182 and a compression type.
   3183 
   3184 The compression types have the same valid numbers as the compression
   3185 types of the image data.  Currently, the only valid number is zero.
   3186 However, you can store text either compressed or uncompressed, unlike
   3187 images, which always have to be compressed.  So if you don't want the
   3188 text compressed, set the compression type to PNG_TEXT_COMPRESSION_NONE.
   3189 Because tEXt and zTXt chunks don't have a language field, if you
   3190 specify PNG_TEXT_COMPRESSION_NONE or PNG_TEXT_COMPRESSION_zTXt
   3191 any language code or translated keyword will not be written out.
   3192 
   3193 Until text gets around a few hundred bytes, it is not worth compressing it.
   3194 After the text has been written out to the file, the compression type
   3195 is set to PNG_TEXT_COMPRESSION_NONE_WR or PNG_TEXT_COMPRESSION_zTXt_WR,
   3196 so that it isn't written out again at the end (in case you are calling
   3197 png_write_end() with the same struct).
   3198 
   3199 The keywords that are given in the PNG Specification are:
   3200 
   3201     Title            Short (one line) title or
   3202                      caption for image
   3203 
   3204     Author           Name of image's creator
   3205 
   3206     Description      Description of image (possibly long)
   3207 
   3208     Copyright        Copyright notice
   3209 
   3210     Creation Time    Time of original image creation
   3211                      (usually RFC 1123 format, see below)
   3212 
   3213     Software         Software used to create the image
   3214 
   3215     Disclaimer       Legal disclaimer
   3216 
   3217     Warning          Warning of nature of content
   3218 
   3219     Source           Device used to create the image
   3220 
   3221     Comment          Miscellaneous comment; conversion
   3222                      from other image format
   3223 
   3224 The keyword-text pairs work like this.  Keywords should be short
   3225 simple descriptions of what the comment is about.  Some typical
   3226 keywords are found in the PNG specification, as is some recommendations
   3227 on keywords.  You can repeat keywords in a file.  You can even write
   3228 some text before the image and some after.  For example, you may want
   3229 to put a description of the image before the image, but leave the
   3230 disclaimer until after, so viewers working over modem connections
   3231 don't have to wait for the disclaimer to go over the modem before
   3232 they start seeing the image.  Finally, keywords should be full
   3233 words, not abbreviations.  Keywords and text are in the ISO 8859-1
   3234 (Latin-1) character set (a superset of regular ASCII) and can not
   3235 contain NUL characters, and should not contain control or other
   3236 unprintable characters.  To make the comments widely readable, stick
   3237 with basic ASCII, and avoid machine specific character set extensions
   3238 like the IBM-PC character set.  The keyword must be present, but
   3239 you can leave off the text string on non-compressed pairs.
   3240 Compressed pairs must have a text string, as only the text string
   3241 is compressed anyway, so the compression would be meaningless.
   3242 
   3243 PNG supports modification time via the png_time structure.  Two
   3244 conversion routines are provided, png_convert_from_time_t() for
   3245 time_t and png_convert_from_struct_tm() for struct tm.  The
   3246 time_t routine uses gmtime().  You don't have to use either of
   3247 these, but if you wish to fill in the png_time structure directly,
   3248 you should provide the time in universal time (GMT) if possible
   3249 instead of your local time.  Note that the year number is the full
   3250 year (e.g. 1998, rather than 98 - PNG is year 2000 compliant!), and
   3251 that months start with 1.
   3252 
   3253 If you want to store the time of the original image creation, you should
   3254 use a plain tEXt chunk with the "Creation Time" keyword.  This is
   3255 necessary because the "creation time" of a PNG image is somewhat vague,
   3256 depending on whether you mean the PNG file, the time the image was
   3257 created in a non-PNG format, a still photo from which the image was
   3258 scanned, or possibly the subject matter itself.  In order to facilitate
   3259 machine-readable dates, it is recommended that the "Creation Time"
   3260 tEXt chunk use RFC 1123 format dates (e.g. "22 May 1997 18:07:10 GMT"),
   3261 although this isn't a requirement.  Unlike the tIME chunk, the
   3262 "Creation Time" tEXt chunk is not expected to be automatically changed
   3263 by the software.  To facilitate the use of RFC 1123 dates, a function
   3264 png_convert_to_rfc1123_buffer(png_ptr, buffer, png_timep) is provided to
   3265 convert from PNG time to an RFC 1123 format string.  The caller must provide
   3266 a writeable buffer of at least 29 bytes.
   3267 
   3268 Writing unknown chunks
   3269 
   3270 You can use the png_set_unknown_chunks function to queue up private chunks
   3271 for writing.  You give it a chunk name, location, raw data, and a size.  You
   3272 also must use png_set_keep_unknown_chunks() to ensure that libpng will
   3273 handle them.  That's all there is to it.  The chunks will be written by the
   3274 next following png_write_info_before_PLTE, png_write_info, or png_write_end
   3275 function, depending upon the specified location.  Any chunks previously
   3276 read into the info structure's unknown-chunk list will also be written out
   3277 in a sequence that satisfies the PNG specification's ordering rules.
   3278 
   3279 Here is an example of writing two private chunks, prVt and miNE:
   3280 
   3281     #ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
   3282     /* Set unknown chunk data */
   3283     png_unknown_chunk unk_chunk[2];
   3284     strcpy((char *) unk_chunk[0].name, "prVt";
   3285     unk_chunk[0].data = (unsigned char *) "PRIVATE DATA";
   3286     unk_chunk[0].size = strlen(unk_chunk[0].data)+1;
   3287     unk_chunk[0].location = PNG_HAVE_IHDR;
   3288     strcpy((char *) unk_chunk[1].name, "miNE";
   3289     unk_chunk[1].data = (unsigned char *) "MY CHUNK DATA";
   3290     unk_chunk[1].size = strlen(unk_chunk[0].data)+1;
   3291     unk_chunk[1].location = PNG_AFTER_IDAT;
   3292     png_set_unknown_chunks(write_ptr, write_info_ptr,
   3293         unk_chunk, 2);
   3294     /* Needed because miNE is not safe-to-copy */
   3295     png_set_keep_unknown_chunks(png, PNG_HANDLE_CHUNK_ALWAYS,
   3296        (png_bytep) "miNE", 1);
   3297     # if PNG_LIBPNG_VER < 10600
   3298       /* Deal with unknown chunk location bug in 1.5.x and earlier */
   3299       png_set_unknown_chunk_location(png, info, 0, PNG_HAVE_IHDR);
   3300       png_set_unknown_chunk_location(png, info, 1, PNG_AFTER_IDAT);
   3301     # endif
   3302     # if PNG_LIBPNG_VER < 10500
   3303       /* PNG_AFTER_IDAT writes two copies of the chunk prior to libpng-1.5.0,
   3304        * one before IDAT and another after IDAT, so don't use it; only use
   3305        * PNG_HAVE_IHDR location.  This call resets the location previously
   3306        * set by assignment and png_set_unknown_chunk_location() for chunk 1.
   3307        */
   3308       png_set_unknown_chunk_location(png, info, 1, PNG_HAVE_IHDR);
   3309     # endif
   3310     #endif
   3311 
   3312 The high-level write interface
   3313 
   3314 At this point there are two ways to proceed; through the high-level
   3315 write interface, or through a sequence of low-level write operations.
   3316 You can use the high-level interface if your image data is present
   3317 in the info structure.  All defined output
   3318 transformations are permitted, enabled by the following masks.
   3319 
   3320     PNG_TRANSFORM_IDENTITY      No transformation
   3321     PNG_TRANSFORM_PACKING       Pack 1, 2 and 4-bit samples
   3322     PNG_TRANSFORM_PACKSWAP      Change order of packed
   3323                                 pixels to LSB first
   3324     PNG_TRANSFORM_INVERT_MONO   Invert monochrome images
   3325     PNG_TRANSFORM_SHIFT         Normalize pixels to the
   3326                                 sBIT depth
   3327     PNG_TRANSFORM_BGR           Flip RGB to BGR, RGBA
   3328                                 to BGRA
   3329     PNG_TRANSFORM_SWAP_ALPHA    Flip RGBA to ARGB or GA
   3330                                 to AG
   3331     PNG_TRANSFORM_INVERT_ALPHA  Change alpha from opacity
   3332                                 to transparency
   3333     PNG_TRANSFORM_SWAP_ENDIAN   Byte-swap 16-bit samples
   3334     PNG_TRANSFORM_STRIP_FILLER        Strip out filler
   3335                                       bytes (deprecated).
   3336     PNG_TRANSFORM_STRIP_FILLER_BEFORE Strip out leading
   3337                                       filler bytes
   3338     PNG_TRANSFORM_STRIP_FILLER_AFTER  Strip out trailing
   3339                                       filler bytes
   3340 
   3341 If you have valid image data in the info structure (you can use
   3342 png_set_rows() to put image data in the info structure), simply do this:
   3343 
   3344     png_write_png(png_ptr, info_ptr, png_transforms, NULL)
   3345 
   3346 where png_transforms is an integer containing the bitwise OR of some set of
   3347 transformation flags.  This call is equivalent to png_write_info(),
   3348 followed the set of transformations indicated by the transform mask,
   3349 then png_write_image(), and finally png_write_end().
   3350 
   3351 (The final parameter of this call is not yet used.  Someday it might point
   3352 to transformation parameters required by some future output transform.)
   3353 
   3354 You must use png_transforms and not call any png_set_transform() functions
   3355 when you use png_write_png().
   3356 
   3357 The low-level write interface
   3358 
   3359 If you are going the low-level route instead, you are now ready to
   3360 write all the file information up to the actual image data.  You do
   3361 this with a call to png_write_info().
   3362 
   3363     png_write_info(png_ptr, info_ptr);
   3364 
   3365 Note that there is one transformation you may need to do before
   3366 png_write_info().  In PNG files, the alpha channel in an image is the
   3367 level of opacity.  If your data is supplied as a level of transparency,
   3368 you can invert the alpha channel before you write it, so that 0 is
   3369 fully transparent and 255 (in 8-bit or paletted images) or 65535
   3370 (in 16-bit images) is fully opaque, with
   3371 
   3372     png_set_invert_alpha(png_ptr);
   3373 
   3374 This must appear before png_write_info() instead of later with the
   3375 other transformations because in the case of paletted images the tRNS
   3376 chunk data has to be inverted before the tRNS chunk is written.  If
   3377 your image is not a paletted image, the tRNS data (which in such cases
   3378 represents a single color to be rendered as transparent) won't need to
   3379 be changed, and you can safely do this transformation after your
   3380 png_write_info() call.
   3381 
   3382 If you need to write a private chunk that you want to appear before
   3383 the PLTE chunk when PLTE is present, you can write the PNG info in
   3384 two steps, and insert code to write your own chunk between them:
   3385 
   3386     png_write_info_before_PLTE(png_ptr, info_ptr);
   3387     png_set_unknown_chunks(png_ptr, info_ptr, ...);
   3388     png_write_info(png_ptr, info_ptr);
   3389 
   3390 After you've written the file information, you can set up the library
   3391 to handle any special transformations of the image data.  The various
   3392 ways to transform the data will be described in the order that they
   3393 should occur.  This is important, as some of these change the color
   3394 type and/or bit depth of the data, and some others only work on
   3395 certain color types and bit depths.  Even though each transformation
   3396 checks to see if it has data that it can do something with, you should
   3397 make sure to only enable a transformation if it will be valid for the
   3398 data.  For example, don't swap red and blue on grayscale data.
   3399 
   3400 PNG files store RGB pixels packed into 3 or 6 bytes.  This code tells
   3401 the library to strip input data that has 4 or 8 bytes per pixel down
   3402 to 3 or 6 bytes (or strip 2 or 4-byte grayscale+filler data to 1 or 2
   3403 bytes per pixel).
   3404 
   3405     png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
   3406 
   3407 where the 0 is unused, and the location is either PNG_FILLER_BEFORE or
   3408 PNG_FILLER_AFTER, depending upon whether the filler byte in the pixel
   3409 is stored XRGB or RGBX.
   3410 
   3411 PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as
   3412 they can, resulting in, for example, 8 pixels per byte for 1 bit files.
   3413 If the data is supplied at 1 pixel per byte, use this code, which will
   3414 correctly pack the pixels into a single byte:
   3415 
   3416     png_set_packing(png_ptr);
   3417 
   3418 PNG files reduce possible bit depths to 1, 2, 4, 8, and 16.  If your
   3419 data is of another bit depth, you can write an sBIT chunk into the
   3420 file so that decoders can recover the original data if desired.
   3421 
   3422     /* Set the true bit depth of the image data */
   3423     if (color_type & PNG_COLOR_MASK_COLOR)
   3424     {
   3425        sig_bit.red = true_bit_depth;
   3426        sig_bit.green = true_bit_depth;
   3427        sig_bit.blue = true_bit_depth;
   3428     }
   3429 
   3430     else
   3431     {
   3432        sig_bit.gray = true_bit_depth;
   3433     }
   3434 
   3435     if (color_type & PNG_COLOR_MASK_ALPHA)
   3436     {
   3437        sig_bit.alpha = true_bit_depth;
   3438     }
   3439 
   3440     png_set_sBIT(png_ptr, info_ptr, &sig_bit);
   3441 
   3442 If the data is stored in the row buffer in a bit depth other than
   3443 one supported by PNG (e.g. 3 bit data in the range 0-7 for a 4-bit PNG),
   3444 this will scale the values to appear to be the correct bit depth as
   3445 is required by PNG.
   3446 
   3447     png_set_shift(png_ptr, &sig_bit);
   3448 
   3449 PNG files store 16-bit pixels in network byte order (big-endian,
   3450 ie. most significant bits first).  This code would be used if they are
   3451 supplied the other way (little-endian, i.e. least significant bits
   3452 first, the way PCs store them):
   3453 
   3454     if (bit_depth > 8)
   3455        png_set_swap(png_ptr);
   3456 
   3457 If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you
   3458 need to change the order the pixels are packed into bytes, you can use:
   3459 
   3460     if (bit_depth < 8)
   3461        png_set_packswap(png_ptr);
   3462 
   3463 PNG files store 3 color pixels in red, green, blue order.  This code
   3464 would be used if they are supplied as blue, green, red:
   3465 
   3466     png_set_bgr(png_ptr);
   3467 
   3468 PNG files describe monochrome as black being zero and white being
   3469 one. This code would be used if the pixels are supplied with this reversed
   3470 (black being one and white being zero):
   3471 
   3472     png_set_invert_mono(png_ptr);
   3473 
   3474 Finally, you can write your own transformation function if none of
   3475 the existing ones meets your needs.  This is done by setting a callback
   3476 with
   3477 
   3478     png_set_write_user_transform_fn(png_ptr,
   3479        write_transform_fn);
   3480 
   3481 You must supply the function
   3482 
   3483     void write_transform_fn(png_structp png_ptr, png_row_infop
   3484        row_info, png_bytep data)
   3485 
   3486 See pngtest.c for a working example.  Your function will be called
   3487 before any of the other transformations are processed.  If supported
   3488 libpng also supplies an information routine that may be called from
   3489 your callback:
   3490 
   3491    png_get_current_row_number(png_ptr);
   3492    png_get_current_pass_number(png_ptr);
   3493 
   3494 This returns the current row passed to the transform.  With interlaced
   3495 images the value returned is the row in the input sub-image image.  Use
   3496 PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to
   3497 find the output pixel (x,y) given an interlaced sub-image pixel (row,col,pass).
   3498 
   3499 The discussion of interlace handling above contains more information on how to
   3500 use these values.
   3501 
   3502 You can also set up a pointer to a user structure for use by your
   3503 callback function.
   3504 
   3505     png_set_user_transform_info(png_ptr, user_ptr, 0, 0);
   3506 
   3507 The user_channels and user_depth parameters of this function are ignored
   3508 when writing; you can set them to zero as shown.
   3509 
   3510 You can retrieve the pointer via the function png_get_user_transform_ptr().
   3511 For example:
   3512 
   3513     voidp write_user_transform_ptr =
   3514        png_get_user_transform_ptr(png_ptr);
   3515 
   3516 It is possible to have libpng flush any pending output, either manually,
   3517 or automatically after a certain number of lines have been written.  To
   3518 flush the output stream a single time call:
   3519 
   3520     png_write_flush(png_ptr);
   3521 
   3522 and to have libpng flush the output stream periodically after a certain
   3523 number of scanlines have been written, call:
   3524 
   3525     png_set_flush(png_ptr, nrows);
   3526 
   3527 Note that the distance between rows is from the last time png_write_flush()
   3528 was called, or the first row of the image if it has never been called.
   3529 So if you write 50 lines, and then png_set_flush 25, it will flush the
   3530 output on the next scanline, and every 25 lines thereafter, unless
   3531 png_write_flush() is called before 25 more lines have been written.
   3532 If nrows is too small (less than about 10 lines for a 640 pixel wide
   3533 RGB image) the image compression may decrease noticeably (although this
   3534 may be acceptable for real-time applications).  Infrequent flushing will
   3535 only degrade the compression performance by a few percent over images
   3536 that do not use flushing.
   3537 
   3538 Writing the image data
   3539 
   3540 That's it for the transformations.  Now you can write the image data.
   3541 The simplest way to do this is in one function call.  If you have the
   3542 whole image in memory, you can just call png_write_image() and libpng
   3543 will write the image.  You will need to pass in an array of pointers to
   3544 each row.  This function automatically handles interlacing, so you don't
   3545 need to call png_set_interlace_handling() or call this function multiple
   3546 times, or any of that other stuff necessary with png_write_rows().
   3547 
   3548     png_write_image(png_ptr, row_pointers);
   3549 
   3550 where row_pointers is:
   3551 
   3552     png_byte *row_pointers[height];
   3553 
   3554 You can point to void or char or whatever you use for pixels.
   3555 
   3556 If you don't want to write the whole image at once, you can
   3557 use png_write_rows() instead.  If the file is not interlaced,
   3558 this is simple:
   3559 
   3560     png_write_rows(png_ptr, row_pointers,
   3561        number_of_rows);
   3562 
   3563 row_pointers is the same as in the png_write_image() call.
   3564 
   3565 If you are just writing one row at a time, you can do this with
   3566 a single row_pointer instead of an array of row_pointers:
   3567 
   3568     png_bytep row_pointer = row;
   3569 
   3570     png_write_row(png_ptr, row_pointer);
   3571 
   3572 When the file is interlaced, things can get a good deal more complicated.
   3573 The only currently (as of the PNG Specification version 1.2, dated July
   3574 1999) defined interlacing scheme for PNG files is the "Adam7" interlace
   3575 scheme, that breaks down an image into seven smaller images of varying
   3576 size.  libpng will build these images for you, or you can do them
   3577 yourself.  If you want to build them yourself, see the PNG specification
   3578 for details of which pixels to write when.
   3579 
   3580 If you don't want libpng to handle the interlacing details, just
   3581 use png_set_interlace_handling() and call png_write_rows() the
   3582 correct number of times to write all the sub-images
   3583 (png_set_interlace_handling() returns the number of sub-images.)
   3584 
   3585 If you want libpng to build the sub-images, call this before you start
   3586 writing any rows:
   3587 
   3588     number_of_passes = png_set_interlace_handling(png_ptr);
   3589 
   3590 This will return the number of passes needed.  Currently, this is seven,
   3591 but may change if another interlace type is added.
   3592 
   3593 Then write the complete image number_of_passes times.
   3594 
   3595     png_write_rows(png_ptr, row_pointers, number_of_rows);
   3596 
   3597 Think carefully before you write an interlaced image.  Typically code that
   3598 reads such images reads all the image data into memory, uncompressed, before
   3599 doing any processing.  Only code that can display an image on the fly can
   3600 take advantage of the interlacing and even then the image has to be exactly
   3601 the correct size for the output device, because scaling an image requires
   3602 adjacent pixels and these are not available until all the passes have been
   3603 read.
   3604 
   3605 If you do write an interlaced image you will hardly ever need to handle
   3606 the interlacing yourself.  Call png_set_interlace_handling() and use the
   3607 approach described above.
   3608 
   3609 The only time it is conceivable that you will really need to write an
   3610 interlaced image pass-by-pass is when you have read one pass by pass and
   3611 made some pixel-by-pixel transformation to it, as described in the read
   3612 code above.  In this case use the PNG_PASS_ROWS and PNG_PASS_COLS macros
   3613 to determine the size of each sub-image in turn and simply write the rows
   3614 you obtained from the read code.
   3615 
   3616 Finishing a sequential write
   3617 
   3618 After you are finished writing the image, you should finish writing
   3619 the file.  If you are interested in writing comments or time, you should
   3620 pass an appropriately filled png_info pointer.  If you are not interested,
   3621 you can pass NULL.
   3622 
   3623     png_write_end(png_ptr, info_ptr);
   3624 
   3625 When you are done, you can free all memory used by libpng like this:
   3626 
   3627     png_destroy_write_struct(&png_ptr, &info_ptr);
   3628 
   3629 It is also possible to individually free the info_ptr members that
   3630 point to libpng-allocated storage with the following function:
   3631 
   3632     png_free_data(png_ptr, info_ptr, mask, seq)
   3633 
   3634     mask  - identifies data to be freed, a mask
   3635             containing the bitwise OR of one or
   3636             more of
   3637               PNG_FREE_PLTE, PNG_FREE_TRNS,
   3638               PNG_FREE_HIST, PNG_FREE_ICCP,
   3639               PNG_FREE_PCAL, PNG_FREE_ROWS,
   3640               PNG_FREE_SCAL, PNG_FREE_SPLT,
   3641               PNG_FREE_TEXT, PNG_FREE_UNKN,
   3642             or simply PNG_FREE_ALL
   3643 
   3644     seq   - sequence number of item to be freed
   3645             (-1 for all items)
   3646 
   3647 This function may be safely called when the relevant storage has
   3648 already been freed, or has not yet been allocated, or was allocated
   3649 by the user  and not by libpng,  and will in those cases do nothing.
   3650 The "seq" parameter is ignored if only one item of the selected data
   3651 type, such as PLTE, is allowed.  If "seq" is not -1, and multiple items
   3652 are allowed for the data type identified in the mask, such as text or
   3653 sPLT, only the n'th item in the structure is freed, where n is "seq".
   3654 
   3655 If you allocated data such as a palette that you passed in to libpng
   3656 with png_set_*, you must not free it until just before the call to
   3657 png_destroy_write_struct().
   3658 
   3659 The default behavior is only to free data that was allocated internally
   3660 by libpng.  This can be changed, so that libpng will not free the data,
   3661 or so that it will free data that was allocated by the user with png_malloc()
   3662 or png_calloc() and passed in via a png_set_*() function, with
   3663 
   3664     png_data_freer(png_ptr, info_ptr, freer, mask)
   3665 
   3666     freer  - one of
   3667                PNG_DESTROY_WILL_FREE_DATA
   3668                PNG_SET_WILL_FREE_DATA
   3669                PNG_USER_WILL_FREE_DATA
   3670 
   3671     mask   - which data elements are affected
   3672              same choices as in png_free_data()
   3673 
   3674 For example, to transfer responsibility for some data from a read structure
   3675 to a write structure, you could use
   3676 
   3677     png_data_freer(read_ptr, read_info_ptr,
   3678        PNG_USER_WILL_FREE_DATA,
   3679        PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST)
   3680 
   3681     png_data_freer(write_ptr, write_info_ptr,
   3682        PNG_DESTROY_WILL_FREE_DATA,
   3683        PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST)
   3684 
   3685 thereby briefly reassigning responsibility for freeing to the user but
   3686 immediately afterwards reassigning it once more to the write_destroy
   3687 function.  Having done this, it would then be safe to destroy the read
   3688 structure and continue to use the PLTE, tRNS, and hIST data in the write
   3689 structure.
   3690 
   3691 This function only affects data that has already been allocated.
   3692 You can call this function before calling after the png_set_*() functions
   3693 to control whether the user or png_destroy_*() is supposed to free the data.
   3694 When the user assumes responsibility for libpng-allocated data, the
   3695 application must use
   3696 png_free() to free it, and when the user transfers responsibility to libpng
   3697 for data that the user has allocated, the user must have used png_malloc()
   3698 or png_calloc() to allocate it.
   3699 
   3700 If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword
   3701 separately, do not transfer responsibility for freeing text_ptr to libpng,
   3702 because when libpng fills a png_text structure it combines these members with
   3703 the key member, and png_free_data() will free only text_ptr.key.  Similarly,
   3704 if you transfer responsibility for free'ing text_ptr from libpng to your
   3705 application, your application must not separately free those members.
   3706 For a more compact example of writing a PNG image, see the file example.c.
   3707 
   3708 V. Simplified API
   3709 
   3710 The simplified API, which became available in libpng-1.6.0, hides the details
   3711 of both libpng and the PNG file format itself.
   3712 It allows PNG files to be read into a very limited number of
   3713 in-memory bitmap formats or to be written from the same formats.  If these
   3714 formats do not accommodate your needs then you can, and should, use the more
   3715 sophisticated APIs above - these support a wide variety of in-memory formats
   3716 and a wide variety of sophisticated transformations to those formats as well
   3717 as a wide variety of APIs to manipulate ancilliary information.
   3718 
   3719 To read a PNG file using the simplified API:
   3720 
   3721   1) Declare a 'png_image' structure (see below) on the
   3722      stack and memset() it to all zero.
   3723 
   3724   2) Call the appropriate png_image_begin_read... function.
   3725 
   3726   3) Set the png_image 'format' member to the required
   3727      format and allocate a buffer for the image.
   3728 
   3729   4) Call png_image_finish_read to read the image into
   3730      your buffer.
   3731 
   3732 There are no restrictions on the format of the PNG input itself; all valid
   3733 color types, bit depths, and interlace methods are acceptable, and the
   3734 input image is transformed as necessary to the requested in-memory format
   3735 during the png_image_finish_read() step.
   3736 
   3737 To write a PNG file using the simplified API:
   3738 
   3739   1) Declare a 'png_image' structure on the stack and memset()
   3740      it to all zero.
   3741 
   3742   2) Initialize the members of the structure that describe the
   3743      image, setting the 'format' member to the format of the
   3744      image in memory.
   3745 
   3746   3) Call the appropriate png_image_write... function with a
   3747      pointer to the image to write the PNG data.
   3748 
   3749 png_image is a structure that describes the in-memory format of an image
   3750 when it is being read or define the in-memory format of an image that you
   3751 need to write.  The "png_image" structure contains the following members:
   3752 
   3753    png_uint_32  version Set to PNG_IMAGE_VERSION
   3754    png_uint_32  width   Image width in pixels (columns)
   3755    png_uint_32  height  Image height in pixels (rows)
   3756    png_uint_32  format  Image format as defined below
   3757    png_uint_32  flags   A bit mask containing informational flags
   3758    png_controlp opaque  Initialize to NULL, free with png_image_free
   3759    png_uint_32  colormap_entries; Number of entries in the color-map
   3760    png_uint_32  warning_or_error;
   3761    char         message[64];
   3762 
   3763 In the event of an error or warning the following field warning_or_error
   3764 field will be set to a non-zero value and the 'message' field will contain
   3765 a '\0' terminated string with the libpng error or warning message.  If both
   3766 warnings and an error were encountered, only the error is recorded.  If there
   3767 are multiple warnings, only the first one is recorded.
   3768 
   3769 The upper 30 bits of this value are reserved; the low two bits contain
   3770 a two bit code such that a value more than 1 indicates a failure in the API
   3771 just called:
   3772 
   3773    0 - no warning or error
   3774    1 - warning
   3775    2 - error
   3776    3 - error preceded by warning
   3777 
   3778 The pixels (samples) of the image have one to four channels whose components
   3779 have original values in the range 0 to 1.0:
   3780 
   3781   1: A single gray or luminance channel (G).
   3782   2: A gray/luminance channel and an alpha channel (GA).
   3783   3: Three red, green, blue color channels (RGB).
   3784   4: Three color channels and an alpha channel (RGBA).
   3785 
   3786 The channels are encoded in one of two ways:
   3787 
   3788   a) As a small integer, value 0..255, contained in a single byte.  For the
   3789 alpha channel the original value is simply value/255.  For the color or
   3790 luminance channels the value is encoded according to the sRGB specification
   3791 and matches the 8-bit format expected by typical display devices.
   3792 
   3793 The color/gray channels are not scaled (pre-multiplied) by the alpha
   3794 channel and are suitable for passing to color management software.
   3795 
   3796   b) As a value in the range 0..65535, contained in a 2-byte integer.  All
   3797 channels can be converted to the original value by dividing by 65535; all
   3798 channels are linear.  Color channels use the RGB encoding (RGB end-points) of
   3799 the sRGB specification.  This encoding is identified by the
   3800 PNG_FORMAT_FLAG_LINEAR flag below.
   3801 
   3802 When an alpha channel is present it is expected to denote pixel coverage
   3803 of the color or luminance channels and is returned as an associated alpha
   3804 channel: the color/gray channels are scaled (pre-multiplied) by the alpha
   3805 value.
   3806 
   3807 When a color-mapped image is used as a result of calling
   3808 png_image_read_colormap or png_image_write_colormap the channels are encoded
   3809 in the color-map and the descriptions above apply to the color-map entries.
   3810 The image data is encoded as small integers, value 0..255, that index the
   3811 entries in the color-map.  One integer (one byte) is stored for each pixel.
   3812 
   3813 PNG_FORMAT_*
   3814 
   3815 The #defines to be used in png_image::format.  Each #define identifies a
   3816 particular layout of channel data and, if present, alpha values.  There are
   3817 separate defines for each of the two channel encodings.
   3818 
   3819 A format is built up using single bit flag values.  Not all combinations are
   3820 valid: use the bit flag values below for testing a format returned by the
   3821 read APIs, but set formats from the derived values.
   3822 
   3823 When reading or writing color-mapped images the format should be set to the
   3824 format of the entries in the color-map then png_image_{read,write}_colormap
   3825 called to read or write the color-map and set the format correctly for the
   3826 image data.  Do not set the PNG_FORMAT_FLAG_COLORMAP bit directly!
   3827 
   3828 NOTE: libpng can be built with particular features disabled, if you see
   3829 compiler errors because the definition of one of the following flags has been
   3830 compiled out it is because libpng does not have the required support.  It is
   3831 possible, however, for the libpng configuration to enable the format on just
   3832 read or just write; in that case you may see an error at run time.  You can
   3833 guard against this by checking for the definition of:
   3834 
   3835    PNG_SIMPLIFIED_{READ,WRITE}_{BGR,AFIRST}_SUPPORTED
   3836 
   3837    PNG_FORMAT_FLAG_ALPHA    0x01 format with an alpha channel
   3838    PNG_FORMAT_FLAG_COLOR    0x02 color format: otherwise grayscale
   3839    PNG_FORMAT_FLAG_LINEAR   0x04 png_uint_16 channels else png_byte
   3840    PNG_FORMAT_FLAG_COLORMAP 0x08 libpng use only
   3841    PNG_FORMAT_FLAG_BGR      0x10 BGR colors, else order is RGB
   3842    PNG_FORMAT_FLAG_AFIRST   0x20 alpha channel comes first
   3843 
   3844 Supported formats are as follows.  Future versions of libpng may support more
   3845 formats; for compatibility with older versions simply check if the format
   3846 macro is defined using #ifdef.  These defines describe the in-memory layout
   3847 of the components of the pixels of the image.
   3848 
   3849 First the single byte formats:
   3850 
   3851    PNG_FORMAT_GRAY 0
   3852    PNG_FORMAT_GA   PNG_FORMAT_FLAG_ALPHA
   3853    PNG_FORMAT_AG   (PNG_FORMAT_GA|PNG_FORMAT_FLAG_AFIRST)
   3854    PNG_FORMAT_RGB  PNG_FORMAT_FLAG_COLOR
   3855    PNG_FORMAT_BGR  (PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_BGR)
   3856    PNG_FORMAT_RGBA (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_ALPHA)
   3857    PNG_FORMAT_ARGB (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_AFIRST)
   3858    PNG_FORMAT_BGRA (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_ALPHA)
   3859    PNG_FORMAT_ABGR (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_AFIRST)
   3860 
   3861 Then the linear 2-byte formats.  When naming these "Y" is used to
   3862 indicate a luminance (gray) channel.  The component order within the pixel
   3863 is always the same - there is no provision for swapping the order of the
   3864 components in the linear format.
   3865 
   3866    PNG_FORMAT_LINEAR_Y PNG_FORMAT_FLAG_LINEAR
   3867    PNG_FORMAT_LINEAR_Y_ALPHA
   3868       (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_ALPHA)
   3869    PNG_FORMAT_LINEAR_RGB
   3870       (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR)
   3871    PNG_FORMAT_LINEAR_RGB_ALPHA
   3872       (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR|
   3873       PNG_FORMAT_FLAG_ALPHA)
   3874 
   3875 Color-mapped formats are obtained by calling png_image_{read,write}_colormap,
   3876 as appropriate after setting png_image::format to the format of the color-map
   3877 to be read or written.  Applications may check the value of
   3878 PNG_FORMAT_FLAG_COLORMAP to see if they have called the colormap API.  The
   3879 format of the color-map may be extracted using the following macro.
   3880 
   3881    PNG_FORMAT_OF_COLORMAP(fmt) ((fmt) & ~PNG_FORMAT_FLAG_COLORMAP)
   3882 
   3883 PNG_IMAGE macros
   3884 
   3885 These are convenience macros to derive information from a png_image
   3886 structure.  The PNG_IMAGE_SAMPLE_ macros return values appropriate to the
   3887 actual image sample values - either the entries in the color-map or the
   3888 pixels in the image.  The PNG_IMAGE_PIXEL_ macros return corresponding values
   3889 for the pixels and will always return 1 after a call to
   3890 png_image_{read,write}_colormap.  The remaining macros return information
   3891 about the rows in the image and the complete image.
   3892 
   3893 NOTE: All the macros that take a png_image::format parameter are compile time
   3894 constants if the format parameter is, itself, a constant.  Therefore these
   3895 macros can be used in array declarations and case labels where required.
   3896 Similarly the macros are also pre-processor constants (sizeof is not used) so
   3897 they can be used in #if tests.
   3898 
   3899 First the information about the samples.
   3900 
   3901   PNG_IMAGE_SAMPLE_CHANNELS(fmt)
   3902     Returns the total number of channels in a given format: 1..4
   3903 
   3904   PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)
   3905     Returns the size in bytes of a single component of a pixel or color-map
   3906     entry (as appropriate) in the image.
   3907 
   3908   PNG_IMAGE_SAMPLE_SIZE(fmt)
   3909     This is the size of the sample data for one sample.  If the image is
   3910     color-mapped it is the size of one color-map entry (and image pixels are
   3911     one byte in size), otherwise it is the size of one image pixel.
   3912 
   3913   PNG_IMAGE_COLORMAP_SIZE(fmt)
   3914    The size of the color-map required by the format; this is the size of the
   3915    color-map buffer passed to the png_image_{read,write}_colormap APIs, it is
   3916    a fixed number determined by the format so can easily be allocated on the
   3917    stack if necessary.
   3918 
   3919 #define PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)\
   3920    (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * 256)
   3921    /* The maximum size of the color-map required by the format expressed in a
   3922     * count of components.  This can be used to compile-time allocate a
   3923     * color-map:
   3924     *
   3925     * png_uint_16 colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)];
   3926     *
   3927     * png_byte colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)];
   3928     *
   3929     * Alternatively use the PNG_IMAGE_COLORMAP_SIZE macro below to use the
   3930     * information from one of the png_image_begin_read_ APIs and dynamically
   3931     * allocate the required memory.
   3932     */
   3933 
   3934 
   3935 Corresponding information about the pixels
   3936 
   3937   PNG_IMAGE_PIXEL_(test,fmt)
   3938 
   3939   PNG_IMAGE_PIXEL_CHANNELS(fmt)
   3940    The number of separate channels (components) in a pixel; 1 for a
   3941    color-mapped image.
   3942 
   3943   PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)\
   3944    The size, in bytes, of each component in a pixel; 1 for a color-mapped
   3945    image.
   3946 
   3947   PNG_IMAGE_PIXEL_SIZE(fmt)
   3948    The size, in bytes, of a complete pixel; 1 for a color-mapped image.
   3949 
   3950 Information about the whole row, or whole image
   3951 
   3952   PNG_IMAGE_ROW_STRIDE(image)
   3953    Returns the total number of components in a single row of the image; this
   3954    is the minimum 'row stride', the minimum count of components between each
   3955    row.  For a color-mapped image this is the minimum number of bytes in a
   3956    row.
   3957 
   3958   PNG_IMAGE_BUFFER_SIZE(image, row_stride)
   3959     Returns the size, in bytes, of an image buffer given a png_image and a row
   3960     stride - the number of components to leave space for in each row.
   3961 
   3962   PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB == 0x01
   3963     This indicates the the RGB values of the in-memory bitmap do not
   3964     correspond to the red, green and blue end-points defined by sRGB.
   3965 
   3966   PNG_IMAGE_FLAG_COLORMAP == 0x02
   3967     The PNG is color-mapped.  If this flag is set png_image_read_colormap
   3968     can be used without further loss of image information.  If it is not set
   3969     png_image_read_colormap will cause significant loss if the image has any
   3970 
   3971 READ APIs
   3972 
   3973    The png_image passed to the read APIs must have been initialized by setting
   3974    the png_controlp field 'opaque' to NULL (or, better, memset the whole thing.)
   3975 
   3976    int png_image_begin_read_from_file( png_imagep image,
   3977      const char *file_name)
   3978 
   3979      The named file is opened for read and the image header
   3980      is filled in from the PNG header in the file.
   3981 
   3982    int png_image_begin_read_from_stdio (png_imagep image,
   3983      FILE* file)
   3984 
   3985       The PNG header is read from the stdio FILE object.
   3986 
   3987    int png_image_begin_read_from_memory(png_imagep image,
   3988       png_const_voidp memory, png_size_t size)
   3989 
   3990       The PNG header is read from the given memory buffer.
   3991 
   3992    int png_image_finish_read(png_imagep image,
   3993       png_colorp background, void *buffer,
   3994       png_int_32 row_stride, void *colormap));
   3995 
   3996       Finish reading the image into the supplied buffer and
   3997       clean up the png_image structure.
   3998 
   3999       row_stride is the step, in png_byte or png_uint_16 units
   4000       as appropriate, between adjacent rows.  A positive stride
   4001       indicates that the top-most row is first in the buffer -
   4002       the normal top-down arrangement.  A negative stride
   4003       indicates that the bottom-most row is first in the buffer.
   4004 
   4005       background need only be supplied if an alpha channel must
   4006       be removed from a png_byte format and the removal is to be
   4007       done by compositing on a solid color; otherwise it may be
   4008       NULL and any composition will be done directly onto the
   4009       buffer.  The value is an sRGB color to use for the
   4010       background, for grayscale output the green channel is used.
   4011 
   4012       For linear output removing the alpha channel is always done
   4013       by compositing on black.
   4014 
   4015    void png_image_free(png_imagep image)
   4016 
   4017       Free any data allocated by libpng in image->opaque,
   4018       setting the pointer to NULL.  May be called at any time
   4019       after the structure is initialized.
   4020 
   4021 When the simplified API needs to convert between sRGB and linear colorspaces,
   4022 the actual sRGB transfer curve defined in the sRGB specification (see the
   4023 article at http://en.wikipedia.org/wiki/SRGB) is used, not the gamma=1/2.2
   4024 approximation used elsewhere in libpng.
   4025 
   4026 WRITE APIS
   4027 
   4028 For write you must initialize a png_image structure to describe the image to
   4029 be written:
   4030 
   4031    version: must be set to PNG_IMAGE_VERSION
   4032    opaque: must be initialized to NULL
   4033    width: image width in pixels
   4034    height: image height in rows
   4035    format: the format of the data you wish to write
   4036    flags: set to 0 unless one of the defined flags applies; set
   4037       PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB for color format images
   4038       where the RGB values do not correspond to the colors in sRGB.
   4039    colormap_entries: set to the number of entries in the color-map (0 to 256)
   4040 
   4041    int png_image_write_to_file, (png_imagep image,
   4042       const char *file, int convert_to_8bit, const void *buffer,
   4043       png_int_32 row_stride, const void *colormap));
   4044 
   4045       Write the image to the named file.
   4046 
   4047    int png_image_write_to_stdio(png_imagep image, FILE *file,
   4048       int convert_to_8_bit, const void *buffer,
   4049       png_int_32 row_stride, const void *colormap)
   4050 
   4051       Write the image to the given (FILE*).
   4052 
   4053 With all write APIs if image is in one of the linear formats with
   4054 (png_uint_16) data then setting convert_to_8_bit will cause the output to be
   4055 a (png_byte) PNG gamma encoded according to the sRGB specification, otherwise
   4056 a 16-bit linear encoded PNG file is written.
   4057 
   4058 With all APIs row_stride is handled as in the read APIs - it is the spacing
   4059 from one row to the next in component sized units (float) and if negative
   4060 indicates a bottom-up row layout in the buffer.
   4061 
   4062 Note that the write API does not support interlacing, sub-8-bit pixels,
   4063 and indexed (paletted) images.
   4064 
   4065 VI. Modifying/Customizing libpng
   4066 
   4067 There are two issues here.  The first is changing how libpng does
   4068 standard things like memory allocation, input/output, and error handling.
   4069 The second deals with more complicated things like adding new chunks,
   4070 adding new transformations, and generally changing how libpng works.
   4071 Both of those are compile-time issues; that is, they are generally
   4072 determined at the time the code is written, and there is rarely a need
   4073 to provide the user with a means of changing them.
   4074 
   4075 Memory allocation, input/output, and error handling
   4076 
   4077 All of the memory allocation, input/output, and error handling in libpng
   4078 goes through callbacks that are user-settable.  The default routines are
   4079 in pngmem.c, pngrio.c, pngwio.c, and pngerror.c, respectively.  To change
   4080 these functions, call the appropriate png_set_*_fn() function.
   4081 
   4082 Memory allocation is done through the functions png_malloc(), png_calloc(),
   4083 and png_free().  The png_malloc() and png_free() functions currently just
   4084 call the standard C functions and png_calloc() calls png_malloc() and then
   4085 clears the newly allocated memory to zero; note that png_calloc(png_ptr, size)
   4086 is not the same as the calloc(number, size) function provided by stdlib.h.
   4087 There is limited support for certain systems with segmented memory
   4088 architectures and the types of pointers declared by png.h match this; you
   4089 will have to use appropriate pointers in your application.  Since it is
   4090 unlikely that the method of handling memory allocation on a platform
   4091 will change between applications, these functions must be modified in
   4092 the library at compile time.  If you prefer to use a different method
   4093 of allocating and freeing data, you can use png_create_read_struct_2() or
   4094 png_create_write_struct_2() to register your own functions as described
   4095 above.  These functions also provide a void pointer that can be retrieved
   4096 via
   4097 
   4098     mem_ptr=png_get_mem_ptr(png_ptr);
   4099 
   4100 Your replacement memory functions must have prototypes as follows:
   4101 
   4102     png_voidp malloc_fn(png_structp png_ptr,
   4103        png_alloc_size_t size);
   4104 
   4105     void free_fn(png_structp png_ptr, png_voidp ptr);
   4106 
   4107 Your malloc_fn() must return NULL in case of failure.  The png_malloc()
   4108 function will normally call png_error() if it receives a NULL from the
   4109 system memory allocator or from your replacement malloc_fn().
   4110 
   4111 Your free_fn() will never be called with a NULL ptr, since libpng's
   4112 png_free() checks for NULL before calling free_fn().
   4113 
   4114 Input/Output in libpng is done through png_read() and png_write(),
   4115 which currently just call fread() and fwrite().  The FILE * is stored in
   4116 png_struct and is initialized via png_init_io().  If you wish to change
   4117 the method of I/O, the library supplies callbacks that you can set
   4118 through the function png_set_read_fn() and png_set_write_fn() at run
   4119 time, instead of calling the png_init_io() function.  These functions
   4120 also provide a void pointer that can be retrieved via the function
   4121 png_get_io_ptr().  For example:
   4122 
   4123     png_set_read_fn(png_structp read_ptr,
   4124         voidp read_io_ptr, png_rw_ptr read_data_fn)
   4125 
   4126     png_set_write_fn(png_structp write_ptr,
   4127         voidp write_io_ptr, png_rw_ptr write_data_fn,
   4128         png_flush_ptr output_flush_fn);
   4129 
   4130     voidp read_io_ptr = png_get_io_ptr(read_ptr);
   4131     voidp write_io_ptr = png_get_io_ptr(write_ptr);
   4132 
   4133 The replacement I/O functions must have prototypes as follows:
   4134 
   4135     void user_read_data(png_structp png_ptr,
   4136         png_bytep data, png_size_t length);
   4137 
   4138     void user_write_data(png_structp png_ptr,
   4139         png_bytep data, png_size_t length);
   4140 
   4141     void user_flush_data(png_structp png_ptr);
   4142 
   4143 The user_read_data() function is responsible for detecting and
   4144 handling end-of-data errors.
   4145 
   4146 Supplying NULL for the read, write, or flush functions sets them back
   4147 to using the default C stream functions, which expect the io_ptr to
   4148 point to a standard *FILE structure.  It is probably a mistake
   4149 to use NULL for one of write_data_fn and output_flush_fn but not both
   4150 of them, unless you have built libpng with PNG_NO_WRITE_FLUSH defined.
   4151 It is an error to read from a write stream, and vice versa.
   4152 
   4153 Error handling in libpng is done through png_error() and png_warning().
   4154 Errors handled through png_error() are fatal, meaning that png_error()
   4155 should never return to its caller.  Currently, this is handled via
   4156 setjmp() and longjmp() (unless you have compiled libpng with
   4157 PNG_NO_SETJMP, in which case it is handled via PNG_ABORT()),
   4158 but you could change this to do things like exit() if you should wish,
   4159 as long as your function does not return.
   4160 
   4161 On non-fatal errors, png_warning() is called
   4162 to print a warning message, and then control returns to the calling code.
   4163 By default png_error() and png_warning() print a message on stderr via
   4164 fprintf() unless the library is compiled with PNG_NO_CONSOLE_IO defined
   4165 (because you don't want the messages) or PNG_NO_STDIO defined (because
   4166 fprintf() isn't available).  If you wish to change the behavior of the error
   4167 functions, you will need to set up your own message callbacks.  These
   4168 functions are normally supplied at the time that the png_struct is created.
   4169 It is also possible to redirect errors and warnings to your own replacement
   4170 functions after png_create_*_struct() has been called by calling:
   4171 
   4172     png_set_error_fn(png_structp png_ptr,
   4173         png_voidp error_ptr, png_error_ptr error_fn,
   4174         png_error_ptr warning_fn);
   4175 
   4176     png_voidp error_ptr = png_get_error_ptr(png_ptr);
   4177 
   4178 If NULL is supplied for either error_fn or warning_fn, then the libpng
   4179 default function will be used, calling fprintf() and/or longjmp() if a
   4180 problem is encountered.  The replacement error functions should have
   4181 parameters as follows:
   4182 
   4183     void user_error_fn(png_structp png_ptr,
   4184         png_const_charp error_msg);
   4185 
   4186     void user_warning_fn(png_structp png_ptr,
   4187         png_const_charp warning_msg);
   4188 
   4189 The motivation behind using setjmp() and longjmp() is the C++ throw and
   4190 catch exception handling methods.  This makes the code much easier to write,
   4191 as there is no need to check every return code of every function call.
   4192 However, there are some uncertainties about the status of local variables
   4193 after a longjmp, so the user may want to be careful about doing anything
   4194 after setjmp returns non-zero besides returning itself.  Consult your
   4195 compiler documentation for more details.  For an alternative approach, you
   4196 may wish to use the "cexcept" facility (see http://cexcept.sourceforge.net),
   4197 which is illustrated in pngvalid.c and in contrib/visupng.
   4198 
   4199 Beginning in libpng-1.4.0, the png_set_benign_errors() API became available.
   4200 You can use this to handle certain errors (normally handled as errors)
   4201 as warnings.
   4202 
   4203     png_set_benign_errors (png_ptr, int allowed);
   4204 
   4205     allowed: 0: treat png_benign_error() as an error.
   4206              1: treat png_benign_error() as a warning.
   4207 
   4208 As of libpng-1.6.0, the default condition is to treat benign errors as
   4209 warnings while reading and as errors while writing.
   4210 
   4211 Custom chunks
   4212 
   4213 If you need to read or write custom chunks, you may need to get deeper
   4214 into the libpng code.  The library now has mechanisms for storing
   4215 and writing chunks of unknown type; you can even declare callbacks
   4216 for custom chunks.  However, this may not be good enough if the
   4217 library code itself needs to know about interactions between your
   4218 chunk and existing `intrinsic' chunks.
   4219 
   4220 If you need to write a new intrinsic chunk, first read the PNG
   4221 specification. Acquire a first level of understanding of how it works.
   4222 Pay particular attention to the sections that describe chunk names,
   4223 and look at how other chunks were designed, so you can do things
   4224 similarly.  Second, check out the sections of libpng that read and
   4225 write chunks.  Try to find a chunk that is similar to yours and use
   4226 it as a template.  More details can be found in the comments inside
   4227 the code.  It is best to handle private or unknown chunks in a generic method,
   4228 via callback functions, instead of by modifying libpng functions. This
   4229 is illustrated in pngtest.c, which uses a callback function to handle a
   4230 private "vpAg" chunk and the new "sTER" chunk, which are both unknown to
   4231 libpng.
   4232 
   4233 If you wish to write your own transformation for the data, look through
   4234 the part of the code that does the transformations, and check out some of
   4235 the simpler ones to get an idea of how they work.  Try to find a similar
   4236 transformation to the one you want to add and copy off of it.  More details
   4237 can be found in the comments inside the code itself.
   4238 
   4239 Configuring for 16-bit platforms
   4240 
   4241 You will want to look into zconf.h to tell zlib (and thus libpng) that
   4242 it cannot allocate more then 64K at a time.  Even if you can, the memory
   4243 won't be accessible.  So limit zlib and libpng to 64K by defining MAXSEG_64K.
   4244 
   4245 Configuring for DOS
   4246 
   4247 For DOS users who only have access to the lower 640K, you will
   4248 have to limit zlib's memory usage via a png_set_compression_mem_level()
   4249 call.  See zlib.h or zconf.h in the zlib library for more information.
   4250 
   4251 Configuring for Medium Model
   4252 
   4253 Libpng's support for medium model has been tested on most of the popular
   4254 compilers.  Make sure MAXSEG_64K gets defined, USE_FAR_KEYWORD gets
   4255 defined, and FAR gets defined to far in pngconf.h, and you should be
   4256 all set.  Everything in the library (except for zlib's structure) is
   4257 expecting far data.  You must use the typedefs with the p or pp on
   4258 the end for pointers (or at least look at them and be careful).  Make
   4259 note that the rows of data are defined as png_bytepp, which is
   4260 an "unsigned char far * far *".
   4261 
   4262 Configuring for gui/windowing platforms:
   4263 
   4264 You will need to write new error and warning functions that use the GUI
   4265 interface, as described previously, and set them to be the error and
   4266 warning functions at the time that png_create_*_struct() is called,
   4267 in order to have them available during the structure initialization.
   4268 They can be changed later via png_set_error_fn().  On some compilers,
   4269 you may also have to change the memory allocators (png_malloc, etc.).
   4270 
   4271 Configuring for compiler xxx:
   4272 
   4273 All includes for libpng are in pngconf.h.  If you need to add, change
   4274 or delete an include, this is the place to do it.
   4275 The includes that are not needed outside libpng are placed in pngpriv.h,
   4276 which is only used by the routines inside libpng itself.
   4277 The files in libpng proper only include pngpriv.h and png.h, which
   4278 in turn includes pngconf.h and, as of libpng-1.5.0, pnglibconf.h.
   4279 As of libpng-1.5.0, pngpriv.h also includes three other private header
   4280 files, pngstruct.h, pnginfo.h, and pngdebug.h, which contain material
   4281 that previously appeared in the public headers.
   4282 
   4283 Configuring zlib:
   4284 
   4285 There are special functions to configure the compression.  Perhaps the
   4286 most useful one changes the compression level, which currently uses
   4287 input compression values in the range 0 - 9.  The library normally
   4288 uses the default compression level (Z_DEFAULT_COMPRESSION = 6).  Tests
   4289 have shown that for a large majority of images, compression values in
   4290 the range 3-6 compress nearly as well as higher levels, and do so much
   4291 faster.  For online applications it may be desirable to have maximum speed
   4292 (Z_BEST_SPEED = 1).  With versions of zlib after v0.99, you can also
   4293 specify no compression (Z_NO_COMPRESSION = 0), but this would create
   4294 files larger than just storing the raw bitmap.  You can specify the
   4295 compression level by calling:
   4296 
   4297     #include zlib.h
   4298     png_set_compression_level(png_ptr, level);
   4299 
   4300 Another useful one is to reduce the memory level used by the library.
   4301 The memory level defaults to 8, but it can be lowered if you are
   4302 short on memory (running DOS, for example, where you only have 640K).
   4303 Note that the memory level does have an effect on compression; among
   4304 other things, lower levels will result in sections of incompressible
   4305 data being emitted in smaller stored blocks, with a correspondingly
   4306 larger relative overhead of up to 15% in the worst case.
   4307 
   4308     #include zlib.h
   4309     png_set_compression_mem_level(png_ptr, level);
   4310 
   4311 The other functions are for configuring zlib.  They are not recommended
   4312 for normal use and may result in writing an invalid PNG file.  See
   4313 zlib.h for more information on what these mean.
   4314 
   4315     #include zlib.h
   4316     png_set_compression_strategy(png_ptr,
   4317         strategy);
   4318 
   4319     png_set_compression_window_bits(png_ptr,
   4320         window_bits);
   4321 
   4322     png_set_compression_method(png_ptr, method);
   4323 
   4324     png_set_compression_buffer_size(png_ptr, size);
   4325 
   4326 As of libpng version 1.5.4, additional APIs became
   4327 available to set these separately for non-IDAT
   4328 compressed chunks such as zTXt, iTXt, and iCCP:
   4329 
   4330     #include zlib.h
   4331     #if PNG_LIBPNG_VER >= 10504
   4332     png_set_text_compression_level(png_ptr, level);
   4333 
   4334     png_set_text_compression_mem_level(png_ptr, level);
   4335 
   4336     png_set_text_compression_strategy(png_ptr,
   4337         strategy);
   4338 
   4339     png_set_text_compression_window_bits(png_ptr,
   4340         window_bits);
   4341 
   4342     png_set_text_compression_method(png_ptr, method);
   4343     #endif
   4344 
   4345 Controlling row filtering
   4346 
   4347 If you want to control whether libpng uses filtering or not, which
   4348 filters are used, and how it goes about picking row filters, you
   4349 can call one of these functions.  The selection and configuration
   4350 of row filters can have a significant impact on the size and
   4351 encoding speed and a somewhat lesser impact on the decoding speed
   4352 of an image.  Filtering is enabled by default for RGB and grayscale
   4353 images (with and without alpha), but not for paletted images nor
   4354 for any images with bit depths less than 8 bits/pixel.
   4355 
   4356 The 'method' parameter sets the main filtering method, which is
   4357 currently only '0' in the PNG 1.2 specification.  The 'filters'
   4358 parameter sets which filter(s), if any, should be used for each
   4359 scanline.  Possible values are PNG_ALL_FILTERS and PNG_NO_FILTERS
   4360 to turn filtering on and off, respectively.
   4361 
   4362 Individual filter types are PNG_FILTER_NONE, PNG_FILTER_SUB,
   4363 PNG_FILTER_UP, PNG_FILTER_AVG, PNG_FILTER_PAETH, which can be bitwise
   4364 ORed together with '|' to specify one or more filters to use.
   4365 These filters are described in more detail in the PNG specification.
   4366 If you intend to change the filter type during the course of writing
   4367 the image, you should start with flags set for all of the filters
   4368 you intend to use so that libpng can initialize its internal
   4369 structures appropriately for all of the filter types.  (Note that this
   4370 means the first row must always be adaptively filtered, because libpng
   4371 currently does not allocate the filter buffers until png_write_row()
   4372 is called for the first time.)
   4373 
   4374     filters = PNG_FILTER_NONE | PNG_FILTER_SUB
   4375               PNG_FILTER_UP | PNG_FILTER_AVG |
   4376               PNG_FILTER_PAETH | PNG_ALL_FILTERS;
   4377 
   4378     png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE,
   4379        filters);
   4380               The second parameter can also be
   4381               PNG_INTRAPIXEL_DIFFERENCING if you are
   4382               writing a PNG to be embedded in a MNG
   4383               datastream.  This parameter must be the
   4384               same as the value of filter_method used
   4385               in png_set_IHDR().
   4386 
   4387 It is also possible to influence how libpng chooses from among the
   4388 available filters.  This is done in one or both of two ways - by
   4389 telling it how important it is to keep the same filter for successive
   4390 rows, and by telling it the relative computational costs of the filters.
   4391 
   4392     double weights[3] = {1.5, 1.3, 1.1},
   4393        costs[PNG_FILTER_VALUE_LAST] =
   4394        {1.0, 1.3, 1.3, 1.5, 1.7};
   4395 
   4396     png_set_filter_heuristics(png_ptr,
   4397        PNG_FILTER_HEURISTIC_WEIGHTED, 3,
   4398        weights, costs);
   4399 
   4400 The weights are multiplying factors that indicate to libpng that the
   4401 row filter should be the same for successive rows unless another row filter
   4402 is that many times better than the previous filter.  In the above example,
   4403 if the previous 3 filters were SUB, SUB, NONE, the SUB filter could have a
   4404 "sum of absolute differences" 1.5 x 1.3 times higher than other filters
   4405 and still be chosen, while the NONE filter could have a sum 1.1 times
   4406 higher than other filters and still be chosen.  Unspecified weights are
   4407 taken to be 1.0, and the specified weights should probably be declining
   4408 like those above in order to emphasize recent filters over older filters.
   4409 
   4410 The filter costs specify for each filter type a relative decoding cost
   4411 to be considered when selecting row filters.  This means that filters
   4412 with higher costs are less likely to be chosen over filters with lower
   4413 costs, unless their "sum of absolute differences" is that much smaller.
   4414 The costs do not necessarily reflect the exact computational speeds of
   4415 the various filters, since this would unduly influence the final image
   4416 size.
   4417 
   4418 Note that the numbers above were invented purely for this example and
   4419 are given only to help explain the function usage.  Little testing has
   4420 been done to find optimum values for either the costs or the weights.
   4421 
   4422 Removing unwanted object code
   4423 
   4424 There are a bunch of #define's in pngconf.h that control what parts of
   4425 libpng are compiled.  All the defines end in _SUPPORTED.  If you are
   4426 never going to use a capability, you can change the #define to #undef
   4427 before recompiling libpng and save yourself code and data space, or
   4428 you can turn off individual capabilities with defines that begin with
   4429 PNG_NO_.
   4430 
   4431 In libpng-1.5.0 and later, the #define's are in pnglibconf.h instead.
   4432 
   4433 You can also turn all of the transforms and ancillary chunk capabilities
   4434 off en masse with compiler directives that define
   4435 PNG_NO_READ[or WRITE]_TRANSFORMS, or PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS,
   4436 or all four,
   4437 along with directives to turn on any of the capabilities that you do
   4438 want.  The PNG_NO_READ[or WRITE]_TRANSFORMS directives disable the extra
   4439 transformations but still leave the library fully capable of reading
   4440 and writing PNG files with all known public chunks. Use of the
   4441 PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS directive produces a library
   4442 that is incapable of reading or writing ancillary chunks.  If you are
   4443 not using the progressive reading capability, you can turn that off
   4444 with PNG_NO_PROGRESSIVE_READ (don't confuse this with the INTERLACING
   4445 capability, which you'll still have).
   4446 
   4447 All the reading and writing specific code are in separate files, so the
   4448 linker should only grab the files it needs.  However, if you want to
   4449 make sure, or if you are building a stand alone library, all the
   4450 reading files start with "pngr" and all the writing files start with "pngw".
   4451 The files that don't match either (like png.c, pngtrans.c, etc.)
   4452 are used for both reading and writing, and always need to be included.
   4453 The progressive reader is in pngpread.c
   4454 
   4455 If you are creating or distributing a dynamically linked library (a .so
   4456 or DLL file), you should not remove or disable any parts of the library,
   4457 as this will cause applications linked with different versions of the
   4458 library to fail if they call functions not available in your library.
   4459 The size of the library itself should not be an issue, because only
   4460 those sections that are actually used will be loaded into memory.
   4461 
   4462 Requesting debug printout
   4463 
   4464 The macro definition PNG_DEBUG can be used to request debugging
   4465 printout.  Set it to an integer value in the range 0 to 3.  Higher
   4466 numbers result in increasing amounts of debugging information.  The
   4467 information is printed to the "stderr" file, unless another file
   4468 name is specified in the PNG_DEBUG_FILE macro definition.
   4469 
   4470 When PNG_DEBUG > 0, the following functions (macros) become available:
   4471 
   4472    png_debug(level, message)
   4473    png_debug1(level, message, p1)
   4474    png_debug2(level, message, p1, p2)
   4475 
   4476 in which "level" is compared to PNG_DEBUG to decide whether to print
   4477 the message, "message" is the formatted string to be printed,
   4478 and p1 and p2 are parameters that are to be embedded in the string
   4479 according to printf-style formatting directives.  For example,
   4480 
   4481    png_debug1(2, "foo=%d", foo);
   4482 
   4483 is expanded to
   4484 
   4485    if (PNG_DEBUG > 2)
   4486       fprintf(PNG_DEBUG_FILE, "foo=%d\n", foo);
   4487 
   4488 When PNG_DEBUG is defined but is zero, the macros aren't defined, but you
   4489 can still use PNG_DEBUG to control your own debugging:
   4490 
   4491    #ifdef PNG_DEBUG
   4492        fprintf(stderr, ...
   4493    #endif
   4494 
   4495 When PNG_DEBUG = 1, the macros are defined, but only png_debug statements
   4496 having level = 0 will be printed.  There aren't any such statements in
   4497 this version of libpng, but if you insert some they will be printed.
   4498 
   4499 Prepending a prefix to exported symbols
   4500 
   4501 Starting with libpng-1.6.0, you can configure libpng (when using the
   4502 "configure" script) to prefix all exported symbols by means of the
   4503 configuration option "--with-libpng-prefix=FOO_", where FOO_ can be any
   4504 string beginning with a letter and containing only uppercase
   4505 and lowercase letters, digits, and the underscore (i.e., a C language
   4506 identifier).  This creates a set of macros in pnglibconf.h, so this is
   4507 transparent to applications; their function calls get transformed by
   4508 the macros to use the modified names.
   4509 
   4510 VII.  MNG support
   4511 
   4512 The MNG specification (available at http://www.libpng.org/pub/mng) allows
   4513 certain extensions to PNG for PNG images that are embedded in MNG datastreams.
   4514 Libpng can support some of these extensions.  To enable them, use the
   4515 png_permit_mng_features() function:
   4516 
   4517    feature_set = png_permit_mng_features(png_ptr, mask)
   4518 
   4519    mask is a png_uint_32 containing the bitwise OR of the
   4520         features you want to enable.  These include
   4521         PNG_FLAG_MNG_EMPTY_PLTE
   4522         PNG_FLAG_MNG_FILTER_64
   4523         PNG_ALL_MNG_FEATURES
   4524 
   4525    feature_set is a png_uint_32 that is the bitwise AND of
   4526       your mask with the set of MNG features that is
   4527       supported by the version of libpng that you are using.
   4528 
   4529 It is an error to use this function when reading or writing a standalone
   4530 PNG file with the PNG 8-byte signature.  The PNG datastream must be wrapped
   4531 in a MNG datastream.  As a minimum, it must have the MNG 8-byte signature
   4532 and the MHDR and MEND chunks.  Libpng does not provide support for these
   4533 or any other MNG chunks; your application must provide its own support for
   4534 them.  You may wish to consider using libmng (available at
   4535 http://www.libmng.com) instead.
   4536 
   4537 VIII.  Changes to Libpng from version 0.88
   4538 
   4539 It should be noted that versions of libpng later than 0.96 are not
   4540 distributed by the original libpng author, Guy Schalnat, nor by
   4541 Andreas Dilger, who had taken over from Guy during 1996 and 1997, and
   4542 distributed versions 0.89 through 0.96, but rather by another member
   4543 of the original PNG Group, Glenn Randers-Pehrson.  Guy and Andreas are
   4544 still alive and well, but they have moved on to other things.
   4545 
   4546 The old libpng functions png_read_init(), png_write_init(),
   4547 png_info_init(), png_read_destroy(), and png_write_destroy() have been
   4548 moved to PNG_INTERNAL in version 0.95 to discourage their use.  These
   4549 functions will be removed from libpng version 1.4.0.
   4550 
   4551 The preferred method of creating and initializing the libpng structures is
   4552 via the png_create_read_struct(), png_create_write_struct(), and
   4553 png_create_info_struct() because they isolate the size of the structures
   4554 from the application, allow version error checking, and also allow the
   4555 use of custom error handling routines during the initialization, which
   4556 the old functions do not.  The functions png_read_destroy() and
   4557 png_write_destroy() do not actually free the memory that libpng
   4558 allocated for these structs, but just reset the data structures, so they
   4559 can be used instead of png_destroy_read_struct() and
   4560 png_destroy_write_struct() if you feel there is too much system overhead
   4561 allocating and freeing the png_struct for each image read.
   4562 
   4563 Setting the error callbacks via png_set_message_fn() before
   4564 png_read_init() as was suggested in libpng-0.88 is no longer supported
   4565 because this caused applications that do not use custom error functions
   4566 to fail if the png_ptr was not initialized to zero.  It is still possible
   4567 to set the error callbacks AFTER png_read_init(), or to change them with
   4568 png_set_error_fn(), which is essentially the same function, but with a new
   4569 name to force compilation errors with applications that try to use the old
   4570 method.
   4571 
   4572 Support for the sCAL, iCCP, iTXt, and sPLT chunks was added at libpng-1.0.6;
   4573 however, iTXt support was not enabled by default.
   4574 
   4575 Starting with version 1.0.7, you can find out which version of the library
   4576 you are using at run-time:
   4577 
   4578    png_uint_32 libpng_vn = png_access_version_number();
   4579 
   4580 The number libpng_vn is constructed from the major version, minor
   4581 version with leading zero, and release number with leading zero,
   4582 (e.g., libpng_vn for version 1.0.7 is 10007).
   4583 
   4584 Note that this function does not take a png_ptr, so you can call it
   4585 before you've created one.
   4586 
   4587 You can also check which version of png.h you used when compiling your
   4588 application:
   4589 
   4590    png_uint_32 application_vn = PNG_LIBPNG_VER;
   4591 
   4592 IX.  Changes to Libpng from version 1.0.x to 1.2.x
   4593 
   4594 Support for user memory management was enabled by default.  To
   4595 accomplish this, the functions png_create_read_struct_2(),
   4596 png_create_write_struct_2(), png_set_mem_fn(), png_get_mem_ptr(),
   4597 png_malloc_default(), and png_free_default() were added.
   4598 
   4599 Support for the iTXt chunk has been enabled by default as of
   4600 version 1.2.41.
   4601 
   4602 Support for certain MNG features was enabled.
   4603 
   4604 Support for numbered error messages was added.  However, we never got
   4605 around to actually numbering the error messages.  The function
   4606 png_set_strip_error_numbers() was added (Note: the prototype for this
   4607 function was inadvertently removed from png.h in PNG_NO_ASSEMBLER_CODE
   4608 builds of libpng-1.2.15.  It was restored in libpng-1.2.36).
   4609 
   4610 The png_malloc_warn() function was added at libpng-1.2.3.  This issues
   4611 a png_warning and returns NULL instead of aborting when it fails to
   4612 acquire the requested memory allocation.
   4613 
   4614 Support for setting user limits on image width and height was enabled
   4615 by default.  The functions png_set_user_limits(), png_get_user_width_max(),
   4616 and png_get_user_height_max() were added at libpng-1.2.6.
   4617 
   4618 The png_set_add_alpha() function was added at libpng-1.2.7.
   4619 
   4620 The function png_set_expand_gray_1_2_4_to_8() was added at libpng-1.2.9.
   4621 Unlike png_set_gray_1_2_4_to_8(), the new function does not expand the
   4622 tRNS chunk to alpha. The png_set_gray_1_2_4_to_8() function is
   4623 deprecated.
   4624 
   4625 A number of macro definitions in support of runtime selection of
   4626 assembler code features (especially Intel MMX code support) were
   4627 added at libpng-1.2.0:
   4628 
   4629     PNG_ASM_FLAG_MMX_SUPPORT_COMPILED
   4630     PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU
   4631     PNG_ASM_FLAG_MMX_READ_COMBINE_ROW
   4632     PNG_ASM_FLAG_MMX_READ_INTERLACE
   4633     PNG_ASM_FLAG_MMX_READ_FILTER_SUB
   4634     PNG_ASM_FLAG_MMX_READ_FILTER_UP
   4635     PNG_ASM_FLAG_MMX_READ_FILTER_AVG
   4636     PNG_ASM_FLAG_MMX_READ_FILTER_PAETH
   4637     PNG_ASM_FLAGS_INITIALIZED
   4638     PNG_MMX_READ_FLAGS
   4639     PNG_MMX_FLAGS
   4640     PNG_MMX_WRITE_FLAGS
   4641     PNG_MMX_FLAGS
   4642 
   4643 We added the following functions in support of runtime
   4644 selection of assembler code features:
   4645 
   4646     png_get_mmx_flagmask()
   4647     png_set_mmx_thresholds()
   4648     png_get_asm_flags()
   4649     png_get_mmx_bitdepth_threshold()
   4650     png_get_mmx_rowbytes_threshold()
   4651     png_set_asm_flags()
   4652 
   4653 We replaced all of these functions with simple stubs in libpng-1.2.20,
   4654 when the Intel assembler code was removed due to a licensing issue.
   4655 
   4656 These macros are deprecated:
   4657 
   4658     PNG_READ_TRANSFORMS_NOT_SUPPORTED
   4659     PNG_PROGRESSIVE_READ_NOT_SUPPORTED
   4660     PNG_NO_SEQUENTIAL_READ_SUPPORTED
   4661     PNG_WRITE_TRANSFORMS_NOT_SUPPORTED
   4662     PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED
   4663     PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED
   4664 
   4665 They have been replaced, respectively, by:
   4666 
   4667     PNG_NO_READ_TRANSFORMS
   4668     PNG_NO_PROGRESSIVE_READ
   4669     PNG_NO_SEQUENTIAL_READ
   4670     PNG_NO_WRITE_TRANSFORMS
   4671     PNG_NO_READ_ANCILLARY_CHUNKS
   4672     PNG_NO_WRITE_ANCILLARY_CHUNKS
   4673 
   4674 PNG_MAX_UINT was replaced with PNG_UINT_31_MAX.  It has been
   4675 deprecated since libpng-1.0.16 and libpng-1.2.6.
   4676 
   4677 The function
   4678     png_check_sig(sig, num)
   4679 was replaced with
   4680     !png_sig_cmp(sig, 0, num)
   4681 It has been deprecated since libpng-0.90.
   4682 
   4683 The function
   4684     png_set_gray_1_2_4_to_8()
   4685 which also expands tRNS to alpha was replaced with
   4686     png_set_expand_gray_1_2_4_to_8()
   4687 which does not. It has been deprecated since libpng-1.0.18 and 1.2.9.
   4688 
   4689 X.  Changes to Libpng from version 1.0.x/1.2.x to 1.4.x
   4690 
   4691 Private libpng prototypes and macro definitions were moved from
   4692 png.h and pngconf.h into a new pngpriv.h header file.
   4693 
   4694 Functions png_set_benign_errors(), png_benign_error(), and
   4695 png_chunk_benign_error() were added.
   4696 
   4697 Support for setting the maximum amount of memory that the application
   4698 will allocate for reading chunks was added, as a security measure.
   4699 The functions png_set_chunk_cache_max() and png_get_chunk_cache_max()
   4700 were added to the library.
   4701 
   4702 We implemented support for I/O states by adding png_ptr member io_state
   4703 and functions png_get_io_chunk_name() and png_get_io_state() in pngget.c
   4704 
   4705 We added PNG_TRANSFORM_GRAY_TO_RGB to the available high-level
   4706 input transforms.
   4707 
   4708 Checking for and reporting of errors in the IHDR chunk is more thorough.
   4709 
   4710 Support for global arrays was removed, to improve thread safety.
   4711 
   4712 Some obsolete/deprecated macros and functions have been removed.
   4713 
   4714 Typecasted NULL definitions such as
   4715    #define png_voidp_NULL            (png_voidp)NULL
   4716 were eliminated.  If you used these in your application, just use
   4717 NULL instead.
   4718 
   4719 The png_struct and info_struct members "trans" and "trans_values" were
   4720 changed to "trans_alpha" and "trans_color", respectively.
   4721 
   4722 The obsolete, unused pnggccrd.c and pngvcrd.c files and related makefiles
   4723 were removed.
   4724 
   4725 The PNG_1_0_X and PNG_1_2_X macros were eliminated.
   4726 
   4727 The PNG_LEGACY_SUPPORTED macro was eliminated.
   4728 
   4729 Many WIN32_WCE #ifdefs were removed.
   4730 
   4731 The functions png_read_init(info_ptr), png_write_init(info_ptr),
   4732 png_info_init(info_ptr), png_read_destroy(), and png_write_destroy()
   4733 have been removed.  They have been deprecated since libpng-0.95.
   4734 
   4735 The png_permit_empty_plte() was removed. It has been deprecated
   4736 since libpng-1.0.9.  Use png_permit_mng_features() instead.
   4737 
   4738 We removed the obsolete stub functions png_get_mmx_flagmask(),
   4739 png_set_mmx_thresholds(), png_get_asm_flags(),
   4740 png_get_mmx_bitdepth_threshold(), png_get_mmx_rowbytes_threshold(),
   4741 png_set_asm_flags(), and png_mmx_supported()
   4742 
   4743 We removed the obsolete png_check_sig(), png_memcpy_check(), and
   4744 png_memset_check() functions.  Instead use !png_sig_cmp(), memcpy(),
   4745 and memset(), respectively.
   4746 
   4747 The function png_set_gray_1_2_4_to_8() was removed. It has been
   4748 deprecated since libpng-1.0.18 and 1.2.9, when it was replaced with
   4749 png_set_expand_gray_1_2_4_to_8() because the former function also
   4750 expanded any tRNS chunk to an alpha channel.
   4751 
   4752 Macros for png_get_uint_16, png_get_uint_32, and png_get_int_32
   4753 were added and are used by default instead of the corresponding
   4754 functions. Unfortunately,
   4755 from libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the
   4756 function) incorrectly returned a value of type png_uint_32.
   4757 
   4758 We changed the prototype for png_malloc() from
   4759     png_malloc(png_structp png_ptr, png_uint_32 size)
   4760 to
   4761     png_malloc(png_structp png_ptr, png_alloc_size_t size)
   4762 
   4763 This also applies to the prototype for the user replacement malloc_fn().
   4764 
   4765 The png_calloc() function was added and is used in place of
   4766 of "png_malloc(); memset();" except in the case in png_read_png()
   4767 where the array consists of pointers; in this case a "for" loop is used
   4768 after the png_malloc() to set the pointers to NULL, to give robust.
   4769 behavior in case the application runs out of memory part-way through
   4770 the process.
   4771 
   4772 We changed the prototypes of png_get_compression_buffer_size() and
   4773 png_set_compression_buffer_size() to work with png_size_t instead of
   4774 png_uint_32.
   4775 
   4776 Support for numbered error messages was removed by default, since we
   4777 never got around to actually numbering the error messages. The function
   4778 png_set_strip_error_numbers() was removed from the library by default.
   4779 
   4780 The png_zalloc() and png_zfree() functions are no longer exported.
   4781 The png_zalloc() function no longer zeroes out the memory that it
   4782 allocates.  Applications that called png_zalloc(png_ptr, number, size)
   4783 can call png_calloc(png_ptr, number*size) instead, and can call
   4784 png_free() instead of png_zfree().
   4785 
   4786 Support for dithering was disabled by default in libpng-1.4.0, because
   4787 it has not been well tested and doesn't actually "dither".
   4788 The code was not
   4789 removed, however, and could be enabled by building libpng with
   4790 PNG_READ_DITHER_SUPPORTED defined.  In libpng-1.4.2, this support
   4791 was re-enabled, but the function was renamed png_set_quantize() to
   4792 reflect more accurately what it actually does.  At the same time,
   4793 the PNG_DITHER_[RED,GREEN_BLUE]_BITS macros were also renamed to
   4794 PNG_QUANTIZE_[RED,GREEN,BLUE]_BITS, and PNG_READ_DITHER_SUPPORTED
   4795 was renamed to PNG_READ_QUANTIZE_SUPPORTED.
   4796 
   4797 We removed the trailing '.' from the warning and error messages.
   4798 
   4799 XI.  Changes to Libpng from version 1.4.x to 1.5.x
   4800 
   4801 From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the
   4802 function) incorrectly returned a value of type png_uint_32.
   4803 The incorrect macro was removed from libpng-1.4.5.
   4804 
   4805 Checking for invalid palette index on write was added at libpng
   4806 1.5.10.  If a pixel contains an invalid (out-of-range) index libpng issues
   4807 a benign error.  This is enabled by default because this condition is an
   4808 error according to the PNG specification, Clause 11.3.2, but the error can
   4809 be ignored in each png_ptr with
   4810 
   4811    png_set_check_for_invalid_index(png_ptr, allowed);
   4812 
   4813       allowed  - one of
   4814                  0: disable benign error (accept the
   4815                     invalid data without warning).
   4816                  1: enable benign error (treat the
   4817                     invalid data as an error or a
   4818                     warning).
   4819 
   4820 If the error is ignored, or if png_benign_error() treats it as a warning,
   4821 any invalid pixels are decoded as opaque black by the decoder and written
   4822 as-is by the encoder.
   4823 
   4824 Retrieving the maximum palette index found was added at libpng-1.5.15.
   4825 This statement must appear after png_read_png() or png_read_image() while
   4826 reading, and after png_write_png() or png_write_image() while writing.
   4827 
   4828    int max_palette = png_get_palette_max(png_ptr, info_ptr);
   4829 
   4830 This will return the maximum palette index found in the image, or "-1" if
   4831 the palette was not checked, or "0" if no palette was found.  Note that this
   4832 does not account for any palette index used by ancillary chunks such as the
   4833 bKGD chunk; you must check those separately to determine the maximum
   4834 palette index actually used.
   4835 
   4836 A. Changes that affect users of libpng
   4837 
   4838 There are no substantial API changes between the non-deprecated parts of
   4839 the 1.4.5 API and the 1.5.0 API; however, the ability to directly access
   4840 members of the main libpng control structures, png_struct and png_info,
   4841 deprecated in earlier versions of libpng, has been completely removed from
   4842 libpng 1.5.
   4843 
   4844 We no longer include zlib.h in png.h.  The include statement has been moved
   4845 to pngstruct.h, where it is not accessible by applications. Applications that
   4846 need access to information in zlib.h will need to add the '#include "zlib.h"'
   4847 directive.  It does not matter whether this is placed prior to or after
   4848 the '"#include png.h"' directive.
   4849 
   4850 The png_sprintf(), png_strcpy(), and png_strncpy() macros are no longer used
   4851 and were removed.
   4852 
   4853 We moved the png_strlen(), png_memcpy(), png_memset(), and png_memcmp()
   4854 macros into a private header file (pngpriv.h) that is not accessible to
   4855 applications.
   4856 
   4857 In png_get_iCCP, the type of "profile" was changed from png_charpp
   4858 to png_bytepp, and in png_set_iCCP, from png_charp to png_const_bytep.
   4859 
   4860 There are changes of form in png.h, including new and changed macros to
   4861 declare parts of the API.  Some API functions with arguments that are
   4862 pointers to data not modified within the function have been corrected to
   4863 declare these arguments with PNG_CONST.
   4864 
   4865 Much of the internal use of C macros to control the library build has also
   4866 changed and some of this is visible in the exported header files, in
   4867 particular the use of macros to control data and API elements visible
   4868 during application compilation may require significant revision to
   4869 application code.  (It is extremely rare for an application to do this.)
   4870 
   4871 Any program that compiled against libpng 1.4 and did not use deprecated
   4872 features or access internal library structures should compile and work
   4873 against libpng 1.5, except for the change in the prototype for
   4874 png_get_iCCP() and png_set_iCCP() API functions mentioned above.
   4875 
   4876 libpng 1.5.0 adds PNG_ PASS macros to help in the reading and writing of
   4877 interlaced images.  The macros return the number of rows and columns in
   4878 each pass and information that can be used to de-interlace and (if
   4879 absolutely necessary) interlace an image.
   4880 
   4881 libpng 1.5.0 adds an API png_longjmp(png_ptr, value).  This API calls
   4882 the application-provided png_longjmp_ptr on the internal, but application
   4883 initialized, longjmp buffer.  It is provided as a convenience to avoid
   4884 the need to use the png_jmpbuf macro, which had the unnecessary side
   4885 effect of resetting the internal png_longjmp_ptr value.
   4886 
   4887 libpng 1.5.0 includes a complete fixed point API.  By default this is
   4888 present along with the corresponding floating point API.  In general the
   4889 fixed point API is faster and smaller than the floating point one because
   4890 the PNG file format used fixed point, not floating point.  This applies
   4891 even if the library uses floating point in internal calculations.  A new
   4892 macro, PNG_FLOATING_ARITHMETIC_SUPPORTED, reveals whether the library
   4893 uses floating point arithmetic (the default) or fixed point arithmetic
   4894 internally for performance critical calculations such as gamma correction.
   4895 In some cases, the gamma calculations may produce slightly different
   4896 results.  This has changed the results in png_rgb_to_gray and in alpha
   4897 composition (png_set_background for example). This applies even if the
   4898 original image was already linear (gamma == 1.0) and, therefore, it is
   4899 not necessary to linearize the image.  This is because libpng has *not*
   4900 been changed to optimize that case correctly, yet.
   4901 
   4902 Fixed point support for the sCAL chunk comes with an important caveat;
   4903 the sCAL specification uses a decimal encoding of floating point values
   4904 and the accuracy of PNG fixed point values is insufficient for
   4905 representation of these values. Consequently a "string" API
   4906 (png_get_sCAL_s and png_set_sCAL_s) is the only reliable way of reading
   4907 arbitrary sCAL chunks in the absence of either the floating point API or
   4908 internal floating point calculations.  Starting with libpng-1.5.0, both
   4909 of these functions are present when PNG_sCAL_SUPPORTED is defined.  Prior
   4910 to libpng-1.5.0, their presence also depended upon PNG_FIXED_POINT_SUPPORTED
   4911 being defined and PNG_FLOATING_POINT_SUPPORTED not being defined.
   4912 
   4913 Applications no longer need to include the optional distribution header
   4914 file pngusr.h or define the corresponding macros during application
   4915 build in order to see the correct variant of the libpng API.  From 1.5.0
   4916 application code can check for the corresponding _SUPPORTED macro:
   4917 
   4918 #ifdef PNG_INCH_CONVERSIONS_SUPPORTED
   4919    /* code that uses the inch conversion APIs. */
   4920 #endif
   4921 
   4922 This macro will only be defined if the inch conversion functions have been
   4923 compiled into libpng.  The full set of macros, and whether or not support
   4924 has been compiled in, are available in the header file pnglibconf.h.
   4925 This header file is specific to the libpng build.  Notice that prior to
   4926 1.5.0 the _SUPPORTED macros would always have the default definition unless
   4927 reset by pngusr.h or by explicit settings on the compiler command line.
   4928 These settings may produce compiler warnings or errors in 1.5.0 because
   4929 of macro redefinition.
   4930 
   4931 Applications can now choose whether to use these macros or to call the
   4932 corresponding function by defining PNG_USE_READ_MACROS or
   4933 PNG_NO_USE_READ_MACROS before including png.h.  Notice that this is
   4934 only supported from 1.5.0; defining PNG_NO_USE_READ_MACROS prior to 1.5.0
   4935 will lead to a link failure.
   4936 
   4937 Prior to libpng-1.5.4, the zlib compressor used the same set of parameters
   4938 when compressing the IDAT data and textual data such as zTXt and iCCP.
   4939 In libpng-1.5.4 we reinitialized the zlib stream for each type of data.
   4940 We added five png_set_text_*() functions for setting the parameters to
   4941 use with textual data.
   4942 
   4943 Prior to libpng-1.5.4, the PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
   4944 option was off by default, and slightly inaccurate scaling occurred.
   4945 This option can no longer be turned off, and the choice of accurate
   4946 or inaccurate 16-to-8 scaling is by using the new png_set_scale_16_to_8()
   4947 API for accurate scaling or the old png_set_strip_16_to_8() API for simple
   4948 chopping.  In libpng-1.5.4, the PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
   4949 macro became PNG_READ_SCALE_16_TO_8_SUPPORTED, and the PNG_READ_16_TO_8
   4950 macro became PNG_READ_STRIP_16_TO_8_SUPPORTED, to enable the two
   4951 png_set_*_16_to_8() functions separately.
   4952 
   4953 Prior to libpng-1.5.4, the png_set_user_limits() function could only be
   4954 used to reduce the width and height limits from the value of
   4955 PNG_USER_WIDTH_MAX and PNG_USER_HEIGHT_MAX, although this document said
   4956 that it could be used to override them.  Now this function will reduce or
   4957 increase the limits.
   4958 
   4959 Starting in libpng-1.5.10, the user limits can be set en masse with the
   4960 configuration option PNG_SAFE_LIMITS_SUPPORTED.  If this option is enabled,
   4961 a set of "safe" limits is applied in pngpriv.h.  These can be overridden by
   4962 application calls to png_set_user_limits(), png_set_user_chunk_cache_max(),
   4963 and/or png_set_user_malloc_max() that increase or decrease the limits.  Also,
   4964 in libpng-1.5.10 the default width and height limits were increased
   4965 from 1,000,000 to 0x7ffffff (i.e., made unlimited).  Therefore, the
   4966 limits are now
   4967                                default      safe
   4968    png_user_width_max        0x7fffffff    1,000,000
   4969    png_user_height_max       0x7fffffff    1,000,000
   4970    png_user_chunk_cache_max  0 (unlimited)   128
   4971    png_user_chunk_malloc_max 0 (unlimited) 8,000,000
   4972 
   4973 The png_set_option() function (and the "options" member of the png struct) was
   4974 added to libpng-1.5.15.
   4975 
   4976 B. Changes to the build and configuration of libpng
   4977 
   4978 Details of internal changes to the library code can be found in the CHANGES
   4979 file and in the GIT repository logs.  These will be of no concern to the vast
   4980 majority of library users or builders; however, the few who configure libpng
   4981 to a non-default feature set may need to change how this is done.
   4982 
   4983 There should be no need for library builders to alter build scripts if
   4984 these use the distributed build support - configure or the makefiles -
   4985 however, users of the makefiles may care to update their build scripts
   4986 to build pnglibconf.h where the corresponding makefile does not do so.
   4987 
   4988 Building libpng with a non-default configuration has changed completely.
   4989 The old method using pngusr.h should still work correctly even though the
   4990 way pngusr.h is used in the build has been changed; however, library
   4991 builders will probably want to examine the changes to take advantage of
   4992 new capabilities and to simplify their build system.
   4993 
   4994 B.1 Specific changes to library configuration capabilities
   4995 
   4996 The library now supports a complete fixed point implementation and can
   4997 thus be used on systems that have no floating point support or very
   4998 limited or slow support.  Previously gamma correction, an essential part
   4999 of complete PNG support, required reasonably fast floating point.
   5000 
   5001 As part of this the choice of internal implementation has been made
   5002 independent of the choice of fixed versus floating point APIs and all the
   5003 missing fixed point APIs have been implemented.
   5004 
   5005 The exact mechanism used to control attributes of API functions has
   5006 changed.  A single set of operating system independent macro definitions
   5007 is used and operating system specific directives are defined in
   5008 pnglibconf.h
   5009 
   5010 As part of this the mechanism used to choose procedure call standards on
   5011 those systems that allow a choice has been changed.  At present this only
   5012 affects certain Microsoft (DOS, Windows) and IBM (OS/2) operating systems
   5013 running on Intel processors.  As before, PNGAPI is defined where required
   5014 to control the exported API functions; however, two new macros, PNGCBAPI
   5015 and PNGCAPI, are used instead for callback functions (PNGCBAPI) and
   5016 (PNGCAPI) for functions that must match a C library prototype (currently
   5017 only png_longjmp_ptr, which must match the C longjmp function.)  The new
   5018 approach is documented in pngconf.h
   5019 
   5020 Despite these changes, libpng 1.5.0 only supports the native C function
   5021 calling standard on those platforms tested so far (__cdecl on Microsoft
   5022 Windows).  This is because the support requirements for alternative
   5023 calling conventions seem to no longer exist.  Developers who find it
   5024 necessary to set PNG_API_RULE to 1 should advise the mailing list
   5025 (png-mng-implement) of this and library builders who use Openwatcom and
   5026 therefore set PNG_API_RULE to 2 should also contact the mailing list.
   5027 
   5028 A new test program, pngvalid, is provided in addition to pngtest.
   5029 pngvalid validates the arithmetic accuracy of the gamma correction
   5030 calculations and includes a number of validations of the file format.
   5031 A subset of the full range of tests is run when "make check" is done
   5032 (in the 'configure' build.)  pngvalid also allows total allocated memory
   5033 usage to be evaluated and performs additional memory overwrite validation.
   5034 
   5035 Many changes to individual feature macros have been made. The following
   5036 are the changes most likely to be noticed by library builders who
   5037 configure libpng:
   5038 
   5039 1) All feature macros now have consistent naming:
   5040 
   5041 #define PNG_NO_feature turns the feature off
   5042 #define PNG_feature_SUPPORTED turns the feature on
   5043 
   5044 pnglibconf.h contains one line for each feature macro which is either:
   5045 
   5046 #define PNG_feature_SUPPORTED
   5047 
   5048 if the feature is supported or:
   5049 
   5050 /*#undef PNG_feature_SUPPORTED*/
   5051 
   5052 if it is not.  Library code consistently checks for the 'SUPPORTED' macro.
   5053 It does not, and libpng applications should not, check for the 'NO' macro
   5054 which will not normally be defined even if the feature is not supported.
   5055 The 'NO' macros are only used internally for setting or not setting the
   5056 corresponding 'SUPPORTED' macros.
   5057 
   5058 Compatibility with the old names is provided as follows:
   5059 
   5060 PNG_INCH_CONVERSIONS turns on PNG_INCH_CONVERSIONS_SUPPORTED
   5061 
   5062 And the following definitions disable the corresponding feature:
   5063 
   5064 PNG_SETJMP_NOT_SUPPORTED disables SETJMP
   5065 PNG_READ_TRANSFORMS_NOT_SUPPORTED disables READ_TRANSFORMS
   5066 PNG_NO_READ_COMPOSITED_NODIV disables READ_COMPOSITE_NODIV
   5067 PNG_WRITE_TRANSFORMS_NOT_SUPPORTED disables WRITE_TRANSFORMS
   5068 PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED disables READ_ANCILLARY_CHUNKS
   5069 PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED disables WRITE_ANCILLARY_CHUNKS
   5070 
   5071 Library builders should remove use of the above, inconsistent, names.
   5072 
   5073 2) Warning and error message formatting was previously conditional on
   5074 the STDIO feature. The library has been changed to use the
   5075 CONSOLE_IO feature instead. This means that if CONSOLE_IO is disabled
   5076 the library no longer uses the printf(3) functions, even though the
   5077 default read/write implementations use (FILE) style stdio.h functions.
   5078 
   5079 3) Three feature macros now control the fixed/floating point decisions:
   5080 
   5081 PNG_FLOATING_POINT_SUPPORTED enables the floating point APIs
   5082 
   5083 PNG_FIXED_POINT_SUPPORTED enables the fixed point APIs; however, in
   5084 practice these are normally required internally anyway (because the PNG
   5085 file format is fixed point), therefore in most cases PNG_NO_FIXED_POINT
   5086 merely stops the function from being exported.
   5087 
   5088 PNG_FLOATING_ARITHMETIC_SUPPORTED chooses between the internal floating
   5089 point implementation or the fixed point one.  Typically the fixed point
   5090 implementation is larger and slower than the floating point implementation
   5091 on a system that supports floating point; however, it may be faster on a
   5092 system which lacks floating point hardware and therefore uses a software
   5093 emulation.
   5094 
   5095 4) Added PNG_{READ,WRITE}_INT_FUNCTIONS_SUPPORTED.  This allows the
   5096 functions to read and write ints to be disabled independently of
   5097 PNG_USE_READ_MACROS, which allows libpng to be built with the functions
   5098 even though the default is to use the macros - this allows applications
   5099 to choose at app buildtime whether or not to use macros (previously
   5100 impossible because the functions weren't in the default build.)
   5101 
   5102 B.2 Changes to the configuration mechanism
   5103 
   5104 Prior to libpng-1.5.0 library builders who needed to configure libpng
   5105 had either to modify the exported pngconf.h header file to add system
   5106 specific configuration or had to write feature selection macros into
   5107 pngusr.h and cause this to be included into pngconf.h by defining
   5108 PNG_USER_CONFIG. The latter mechanism had the disadvantage that an
   5109 application built without PNG_USER_CONFIG defined would see the
   5110 unmodified, default, libpng API and thus would probably fail to link.
   5111 
   5112 These mechanisms still work in the configure build and in any makefile
   5113 build that builds pnglibconf.h, although the feature selection macros
   5114 have changed somewhat as described above.  In 1.5.0, however, pngusr.h is
   5115 processed only once, when the exported header file pnglibconf.h is built.
   5116 pngconf.h no longer includes pngusr.h, therefore pngusr.h is ignored after the
   5117 build of pnglibconf.h and it is never included in an application build.
   5118 
   5119 The rarely used alternative of adding a list of feature macros to the
   5120 CPPFLAGS setting in the build also still works; however, the macros will be
   5121 copied to pnglibconf.h and this may produce macro redefinition warnings
   5122 when the individual C files are compiled.
   5123 
   5124 All configuration now only works if pnglibconf.h is built from
   5125 scripts/pnglibconf.dfa.  This requires the program awk.  Brian Kernighan
   5126 (the original author of awk) maintains C source code of that awk and this
   5127 and all known later implementations (often called by subtly different
   5128 names - nawk and gawk for example) are adequate to build pnglibconf.h.
   5129 The Sun Microsystems (now Oracle) program 'awk' is an earlier version
   5130 and does not work; this may also apply to other systems that have a
   5131 functioning awk called 'nawk'.
   5132 
   5133 Configuration options are now documented in scripts/pnglibconf.dfa.  This
   5134 file also includes dependency information that ensures a configuration is
   5135 consistent; that is, if a feature is switched off dependent features are
   5136 also removed.  As a recommended alternative to using feature macros in
   5137 pngusr.h a system builder may also define equivalent options in pngusr.dfa
   5138 (or, indeed, any file) and add that to the configuration by setting
   5139 DFA_XTRA to the file name.  The makefiles in contrib/pngminim illustrate
   5140 how to do this, and a case where pngusr.h is still required.
   5141 
   5142 XII.  Changes to Libpng from version 1.5.x to 1.6.x
   5143 
   5144 A "simplified API" has been added (see documentation in png.h and a simple
   5145 example in contrib/examples/pngtopng.c).  The new publicly visible API
   5146 includes the following:
   5147 
   5148    macros:
   5149      PNG_FORMAT_*
   5150      PNG_IMAGE_*
   5151    structures:
   5152      png_control
   5153      png_image
   5154    read functions
   5155      png_image_begin_read_from_file()
   5156      png_image_begin_read_from_stdio()
   5157      png_image_begin_read_from_memory()
   5158      png_image_finish_read()
   5159      png_image_free()
   5160    write functions
   5161      png_image_write_to_file()
   5162      png_image_write_to_stdio()
   5163 
   5164 Starting with libpng-1.6.0, you can configure libpng to prefix all exported
   5165 symbols, using the PNG_PREFIX macro.
   5166 
   5167 We no longer include string.h in png.h.  The include statement has been moved
   5168 to pngpriv.h, where it is not accessible by applications.  Applications that
   5169 need access to information in string.h must add an '#include <string.h>'
   5170 directive.  It does not matter whether this is placed prior to or after
   5171 the '#include "png.h"' directive.
   5172 
   5173 The following API are now DEPRECATED:
   5174    png_info_init_3()
   5175    png_convert_to_rfc1123() which has been replaced
   5176      with png_convert_to_rfc1123_buffer()
   5177    png_malloc_default()
   5178    png_free_default()
   5179    png_reset_zstream()
   5180 
   5181 The following have been removed:
   5182    png_get_io_chunk_name(), which has been replaced
   5183      with png_get_io_chunk_type().  The new
   5184      function returns a 32-bit integer instead of
   5185      a string.
   5186    The png_sizeof(), png_strlen(), png_memcpy(), png_memcmp(), and
   5187      png_memset() macros are no longer used in the libpng sources and
   5188      have been removed.  These had already been made invisible to applications
   5189      (i.e., defined in the private pngpriv.h header file) since libpng-1.5.0.
   5190 
   5191 The signatures of many exported functions were changed, such that
   5192    png_structp became png_structrp or png_const_structrp
   5193    png_infop became png_inforp or png_const_inforp
   5194 where "rp" indicates a "restricted pointer".
   5195 
   5196 Error detection in some chunks has improved; in particular the iCCP chunk
   5197 reader now does pretty complete validation of the basic format.  Some bad
   5198 profiles that were previously accepted are now accepted with a warning or
   5199 rejected, depending upon the png_set_benign_errors() setting, in particular the
   5200 very old broken Microsoft/HP 3144-byte sRGB profile.  The PNG spec requirement
   5201 that only grayscale profiles may appear in images with color type 0 or 4 and
   5202 that even if the image only contains gray pixels, only RGB profiles may appear
   5203 in images with color type 2, 3, or 6, is now enforced.  The sRGB chunk
   5204 is allowed to appear in images with any color type.
   5205 
   5206 Prior to libpng-1.6.0 a warning would be issued if the iTXt chunk contained
   5207 an empty language field or an empty translated keyword.  Both of these
   5208 are allowed by the PNG specification, so these warnings are no longer issued.
   5209 
   5210 The library now issues an error if the application attempts to set a
   5211 transform after it calls png_read_update_info() or if it attempts to call
   5212 both png_read_update_info() and png_start_read_image() or to call either
   5213 of them more than once.
   5214 
   5215 The default condition for benign_errors is now to treat benign errors as
   5216 warnings while reading and as errors while writing.
   5217 
   5218 The library now issues a warning if both background processing and RGB to
   5219 gray are used when gamma correction happens. As with previous versions of
   5220 the library the results are numerically very incorrect in this case.
   5221 
   5222 There are some minor arithmetic changes in some transforms such as
   5223 png_set_background(), that might be detected by certain regression tests.
   5224 
   5225 Unknown chunk handling has been improved internally, without any API change.
   5226 This adds more correct option control of the unknown handling, corrects
   5227 a pre-existing bug where the per-chunk 'keep' setting is ignored, and makes
   5228 it possible to skip IDAT chunks in the sequential reader.
   5229 
   5230 The machine-generated configure files are no longer included in branches
   5231 libpng16 and later of the GIT repository.  They continue to be included
   5232 in the tarball releases, however.
   5233 
   5234 Libpng-1.6.0 through 1.6.2 used the CMF bytes at the beginning of the IDAT
   5235 stream to set the size of the sliding window for reading instead of using the
   5236 default 32-kbyte sliding window size.  It was discovered that there are
   5237 hundreds of PNG files in the wild that have incorrect CMF bytes that caused
   5238 libpng to issue a "too far back" error and reject the file.  Libpng-1.6.3 and
   5239 later calculate their own safe CMF from the image dimensions, provide a way
   5240 to revert to the libpng-1.5.x behavior (ignoring the CMF bytes and using a
   5241 32-kbyte sliding window), by using
   5242 
   5243     png_set_option(png_ptr, PNG_MAXIMUM_INFLATE_WINDOW,
   5244         PNG_OPTION_ON);
   5245 
   5246 and provide a tool (contrib/tools/pngfix) for optimizing the CMF bytes
   5247 correctly.
   5248 
   5249 Libpng-1.6.0 and libpng-1.6.1 wrote uncompressed iTXt chunks with the wrong
   5250 length, which resulted in PNG files that cannot be read beyond the bad iTXt
   5251 chunk.  This error was fixed in libpng-1.6.3, and a tool (called
   5252 contrib/tools/png-fix-itxt) has been added to the libpng distribution.
   5253 
   5254 XIII.  Detecting libpng
   5255 
   5256 The png_get_io_ptr() function has been present since libpng-0.88, has never
   5257 changed, and is unaffected by conditional compilation macros.  It is the
   5258 best choice for use in configure scripts for detecting the presence of any
   5259 libpng version since 0.88.  In an autoconf "configure.in" you could use
   5260 
   5261     AC_CHECK_LIB(png, png_get_io_ptr, ...
   5262 
   5263 XV. Source code repository
   5264 
   5265 Since about February 2009, version 1.2.34, libpng has been under "git" source
   5266 control.  The git repository was built from old libpng-x.y.z.tar.gz files
   5267 going back to version 0.70.  You can access the git repository (read only)
   5268 at
   5269 
   5270     git://git.code.sf.net/p/libpng/code
   5271 
   5272 or you can browse it with a web browser by selecting the "code" button at
   5273 
   5274     https://sourceforge.net/projects/libpng
   5275 
   5276 Patches can be sent to glennrp at users.sourceforge.net or to
   5277 png-mng-implement at lists.sourceforge.net or you can upload them to
   5278 the libpng bug tracker at
   5279 
   5280     http://libpng.sourceforge.net
   5281 
   5282 We also accept patches built from the tar or zip distributions, and
   5283 simple verbal discriptions of bug fixes, reported either to the
   5284 SourceForge bug tracker, to the png-mng-implement at lists.sf.net
   5285 mailing list, or directly to glennrp.
   5286 
   5287 XV. Coding style
   5288 
   5289 Our coding style is similar to the "Allman" style, with curly
   5290 braces on separate lines:
   5291 
   5292     if (condition)
   5293     {
   5294        action;
   5295     }
   5296 
   5297     else if (another condition)
   5298     {
   5299        another action;
   5300     }
   5301 
   5302 The braces can be omitted from simple one-line actions:
   5303 
   5304     if (condition)
   5305        return (0);
   5306 
   5307 We use 3-space indentation, except for continued statements which
   5308 are usually indented the same as the first line of the statement
   5309 plus four more spaces.
   5310 
   5311 For macro definitions we use 2-space indentation, always leaving the "#"
   5312 in the first column.
   5313 
   5314     #ifndef PNG_NO_FEATURE
   5315     #  ifndef PNG_FEATURE_SUPPORTED
   5316     #    define PNG_FEATURE_SUPPORTED
   5317     #  endif
   5318     #endif
   5319 
   5320 Comments appear with the leading "/*" at the same indentation as
   5321 the statement that follows the comment:
   5322 
   5323     /* Single-line comment */
   5324     statement;
   5325 
   5326     /* This is a multiple-line
   5327      * comment.
   5328      */
   5329     statement;
   5330 
   5331 Very short comments can be placed after the end of the statement
   5332 to which they pertain:
   5333 
   5334     statement;    /* comment */
   5335 
   5336 We don't use C++ style ("//") comments. We have, however,
   5337 used them in the past in some now-abandoned MMX assembler
   5338 code.
   5339 
   5340 Functions and their curly braces are not indented, and
   5341 exported functions are marked with PNGAPI:
   5342 
   5343  /* This is a public function that is visible to
   5344   * application programmers. It does thus-and-so.
   5345   */
   5346  void PNGAPI
   5347  png_exported_function(png_ptr, png_info, foo)
   5348  {
   5349     body;
   5350  }
   5351 
   5352 The return type and decorations are placed on a separate line
   5353 ahead of the function name, as illustrated above.
   5354 
   5355 The prototypes for all exported functions appear in png.h,
   5356 above the comment that says
   5357 
   5358     /* Maintainer: Put new public prototypes here ... */
   5359 
   5360 We mark all non-exported functions with "/* PRIVATE */"":
   5361 
   5362  void /* PRIVATE */
   5363  png_non_exported_function(png_ptr, png_info, foo)
   5364  {
   5365     body;
   5366  }
   5367 
   5368 The prototypes for non-exported functions (except for those in
   5369 pngtest) appear in
   5370 pngpriv.h
   5371 above the comment that says
   5372 
   5373   /* Maintainer: Put new private prototypes here ^ */
   5374 
   5375 We put a space after the "sizeof" operator and we omit the
   5376 optional parentheses around its argument when the argument
   5377 is an expression, not a type name, and we always enclose the
   5378 sizeof operator, with its argument, in parentheses:
   5379 
   5380   (sizeof (png_uint_32))
   5381   (sizeof array)
   5382 
   5383 Prior to libpng-1.6.0 we used a "png_sizeof()" macro, formatted as
   5384 though it were a function.
   5385 
   5386 To avoid polluting the global namespace, the names of all exported
   5387 functions and variables begin with "png_", and all publicly visible C
   5388 preprocessor macros begin with "PNG".  We request that applications that
   5389 use libpng *not* begin any of their own symbols with either of these strings.
   5390 
   5391 We put a space after each comma and after each semicolon
   5392 in "for" statements, and we put spaces before and after each
   5393 C binary operator and after "for" or "while", and before
   5394 "?".  We don't put a space between a typecast and the expression
   5395 being cast, nor do we put one between a function name and the
   5396 left parenthesis that follows it:
   5397 
   5398     for (i = 2; i > 0; --i)
   5399        y[i] = a(x) + (int)b;
   5400 
   5401 We prefer #ifdef and #ifndef to #if defined() and #if !defined()
   5402 when there is only one macro being tested.  We always use parentheses
   5403 with "defined".
   5404 
   5405 We prefer to express integers that are used as bit masks in hex format,
   5406 with an even number of lower-case hex digits (e.g., 0x00, 0xff, 0x0100).
   5407 
   5408 We prefer to use underscores in variable names rather than camelCase, except
   5409 for a few type names that we inherit from zlib.h.
   5410 
   5411 We do not use the TAB character for indentation in the C sources.
   5412 
   5413 Lines do not exceed 80 characters.
   5414 
   5415 Other rules can be inferred by inspecting the libpng source.
   5416 
   5417 XVI. Y2K Compliance in libpng
   5418 
   5419 March 6, 2014
   5420 
   5421 Since the PNG Development group is an ad-hoc body, we can't make
   5422 an official declaration.
   5423 
   5424 This is your unofficial assurance that libpng from version 0.71 and
   5425 upward through 1.6.10 are Y2K compliant.  It is my belief that earlier
   5426 versions were also Y2K compliant.
   5427 
   5428 Libpng only has two year fields.  One is a 2-byte unsigned integer
   5429 that will hold years up to 65535.  The other, which is deprecated,
   5430 holds the date in text format, and will hold years up to 9999.
   5431 
   5432 The integer is
   5433     "png_uint_16 year" in png_time_struct.
   5434 
   5435 The string is
   5436     "char time_buffer[29]" in png_struct.  This is no longer used
   5437 in libpng-1.6.x and will be removed from libpng-1.7.0.
   5438 
   5439 There are seven time-related functions:
   5440 
   5441     png_convert_to_rfc_1123() in png.c
   5442       (formerly png_convert_to_rfc_1152() in error)
   5443     png_convert_from_struct_tm() in pngwrite.c, called
   5444       in pngwrite.c
   5445     png_convert_from_time_t() in pngwrite.c
   5446     png_get_tIME() in pngget.c
   5447     png_handle_tIME() in pngrutil.c, called in pngread.c
   5448     png_set_tIME() in pngset.c
   5449     png_write_tIME() in pngwutil.c, called in pngwrite.c
   5450 
   5451 All appear to handle dates properly in a Y2K environment.  The
   5452 png_convert_from_time_t() function calls gmtime() to convert from system
   5453 clock time, which returns (year - 1900), which we properly convert to
   5454 the full 4-digit year.  There is a possibility that applications using
   5455 libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
   5456 function, or that they are incorrectly passing only a 2-digit year
   5457 instead of "year - 1900" into the png_convert_from_struct_tm() function,
   5458 but this is not under our control.  The libpng documentation has always
   5459 stated that it works with 4-digit years, and the APIs have been
   5460 documented as such.
   5461 
   5462 The tIME chunk itself is also Y2K compliant.  It uses a 2-byte unsigned
   5463 integer to hold the year, and can hold years as large as 65535.
   5464 
   5465 zlib, upon which libpng depends, is also Y2K compliant.  It contains
   5466 no date-related code.
   5467 
   5468 
   5469    Glenn Randers-Pehrson
   5470    libpng maintainer
   5471    PNG Development Group
   5472