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