1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/media/libpng/png.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,3353 @@ 1.4 + 1.5 +/* png.h - header file for PNG reference library 1.6 + * 1.7 + * libpng version 1.6.10 - March 6, 2014 1.8 + * Copyright (c) 1998-2014 Glenn Randers-Pehrson 1.9 + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) 1.10 + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) 1.11 + * 1.12 + * This code is released under the libpng license (See LICENSE, below) 1.13 + * 1.14 + * Authors and maintainers: 1.15 + * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat 1.16 + * libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger 1.17 + * libpng versions 0.97, January 1998, through 1.6.10 - March 6, 2014: Glenn 1.18 + * See also "Contributing Authors", below. 1.19 + * 1.20 + * Note about libpng version numbers: 1.21 + * 1.22 + * Due to various miscommunications, unforeseen code incompatibilities 1.23 + * and occasional factors outside the authors' control, version numbering 1.24 + * on the library has not always been consistent and straightforward. 1.25 + * The following table summarizes matters since version 0.89c, which was 1.26 + * the first widely used release: 1.27 + * 1.28 + * source png.h png.h shared-lib 1.29 + * version string int version 1.30 + * ------- ------ ----- ---------- 1.31 + * 0.89c "1.0 beta 3" 0.89 89 1.0.89 1.32 + * 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90] 1.33 + * 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95] 1.34 + * 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96] 1.35 + * 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97] 1.36 + * 0.97c 0.97 97 2.0.97 1.37 + * 0.98 0.98 98 2.0.98 1.38 + * 0.99 0.99 98 2.0.99 1.39 + * 0.99a-m 0.99 99 2.0.99 1.40 + * 1.00 1.00 100 2.1.0 [100 should be 10000] 1.41 + * 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000] 1.42 + * 1.0.1 png.h string is 10001 2.1.0 1.43 + * 1.0.1a-e identical to the 10002 from here on, the shared library 1.44 + * 1.0.2 source version) 10002 is 2.V where V is the source code 1.45 + * 1.0.2a-b 10003 version, except as noted. 1.46 + * 1.0.3 10003 1.47 + * 1.0.3a-d 10004 1.48 + * 1.0.4 10004 1.49 + * 1.0.4a-f 10005 1.50 + * 1.0.5 (+ 2 patches) 10005 1.51 + * 1.0.5a-d 10006 1.52 + * 1.0.5e-r 10100 (not source compatible) 1.53 + * 1.0.5s-v 10006 (not binary compatible) 1.54 + * 1.0.6 (+ 3 patches) 10006 (still binary incompatible) 1.55 + * 1.0.6d-f 10007 (still binary incompatible) 1.56 + * 1.0.6g 10007 1.57 + * 1.0.6h 10007 10.6h (testing xy.z so-numbering) 1.58 + * 1.0.6i 10007 10.6i 1.59 + * 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0) 1.60 + * 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible) 1.61 + * 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible) 1.62 + * 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible) 1.63 + * 1.0.7 1 10007 (still compatible) 1.64 + * 1.0.8beta1-4 1 10008 2.1.0.8beta1-4 1.65 + * 1.0.8rc1 1 10008 2.1.0.8rc1 1.66 + * 1.0.8 1 10008 2.1.0.8 1.67 + * 1.0.9beta1-6 1 10009 2.1.0.9beta1-6 1.68 + * 1.0.9rc1 1 10009 2.1.0.9rc1 1.69 + * 1.0.9beta7-10 1 10009 2.1.0.9beta7-10 1.70 + * 1.0.9rc2 1 10009 2.1.0.9rc2 1.71 + * 1.0.9 1 10009 2.1.0.9 1.72 + * 1.0.10beta1 1 10010 2.1.0.10beta1 1.73 + * 1.0.10rc1 1 10010 2.1.0.10rc1 1.74 + * 1.0.10 1 10010 2.1.0.10 1.75 + * 1.0.11beta1-3 1 10011 2.1.0.11beta1-3 1.76 + * 1.0.11rc1 1 10011 2.1.0.11rc1 1.77 + * 1.0.11 1 10011 2.1.0.11 1.78 + * 1.0.12beta1-2 2 10012 2.1.0.12beta1-2 1.79 + * 1.0.12rc1 2 10012 2.1.0.12rc1 1.80 + * 1.0.12 2 10012 2.1.0.12 1.81 + * 1.1.0a-f - 10100 2.1.1.0a-f (branch abandoned) 1.82 + * 1.2.0beta1-2 2 10200 2.1.2.0beta1-2 1.83 + * 1.2.0beta3-5 3 10200 3.1.2.0beta3-5 1.84 + * 1.2.0rc1 3 10200 3.1.2.0rc1 1.85 + * 1.2.0 3 10200 3.1.2.0 1.86 + * 1.2.1beta1-4 3 10201 3.1.2.1beta1-4 1.87 + * 1.2.1rc1-2 3 10201 3.1.2.1rc1-2 1.88 + * 1.2.1 3 10201 3.1.2.1 1.89 + * 1.2.2beta1-6 12 10202 12.so.0.1.2.2beta1-6 1.90 + * 1.0.13beta1 10 10013 10.so.0.1.0.13beta1 1.91 + * 1.0.13rc1 10 10013 10.so.0.1.0.13rc1 1.92 + * 1.2.2rc1 12 10202 12.so.0.1.2.2rc1 1.93 + * 1.0.13 10 10013 10.so.0.1.0.13 1.94 + * 1.2.2 12 10202 12.so.0.1.2.2 1.95 + * 1.2.3rc1-6 12 10203 12.so.0.1.2.3rc1-6 1.96 + * 1.2.3 12 10203 12.so.0.1.2.3 1.97 + * 1.2.4beta1-3 13 10204 12.so.0.1.2.4beta1-3 1.98 + * 1.0.14rc1 13 10014 10.so.0.1.0.14rc1 1.99 + * 1.2.4rc1 13 10204 12.so.0.1.2.4rc1 1.100 + * 1.0.14 10 10014 10.so.0.1.0.14 1.101 + * 1.2.4 13 10204 12.so.0.1.2.4 1.102 + * 1.2.5beta1-2 13 10205 12.so.0.1.2.5beta1-2 1.103 + * 1.0.15rc1-3 10 10015 10.so.0.1.0.15rc1-3 1.104 + * 1.2.5rc1-3 13 10205 12.so.0.1.2.5rc1-3 1.105 + * 1.0.15 10 10015 10.so.0.1.0.15 1.106 + * 1.2.5 13 10205 12.so.0.1.2.5 1.107 + * 1.2.6beta1-4 13 10206 12.so.0.1.2.6beta1-4 1.108 + * 1.0.16 10 10016 10.so.0.1.0.16 1.109 + * 1.2.6 13 10206 12.so.0.1.2.6 1.110 + * 1.2.7beta1-2 13 10207 12.so.0.1.2.7beta1-2 1.111 + * 1.0.17rc1 10 10017 12.so.0.1.0.17rc1 1.112 + * 1.2.7rc1 13 10207 12.so.0.1.2.7rc1 1.113 + * 1.0.17 10 10017 12.so.0.1.0.17 1.114 + * 1.2.7 13 10207 12.so.0.1.2.7 1.115 + * 1.2.8beta1-5 13 10208 12.so.0.1.2.8beta1-5 1.116 + * 1.0.18rc1-5 10 10018 12.so.0.1.0.18rc1-5 1.117 + * 1.2.8rc1-5 13 10208 12.so.0.1.2.8rc1-5 1.118 + * 1.0.18 10 10018 12.so.0.1.0.18 1.119 + * 1.2.8 13 10208 12.so.0.1.2.8 1.120 + * 1.2.9beta1-3 13 10209 12.so.0.1.2.9beta1-3 1.121 + * 1.2.9beta4-11 13 10209 12.so.0.9[.0] 1.122 + * 1.2.9rc1 13 10209 12.so.0.9[.0] 1.123 + * 1.2.9 13 10209 12.so.0.9[.0] 1.124 + * 1.2.10beta1-7 13 10210 12.so.0.10[.0] 1.125 + * 1.2.10rc1-2 13 10210 12.so.0.10[.0] 1.126 + * 1.2.10 13 10210 12.so.0.10[.0] 1.127 + * 1.4.0beta1-5 14 10400 14.so.0.0[.0] 1.128 + * 1.2.11beta1-4 13 10211 12.so.0.11[.0] 1.129 + * 1.4.0beta7-8 14 10400 14.so.0.0[.0] 1.130 + * 1.2.11 13 10211 12.so.0.11[.0] 1.131 + * 1.2.12 13 10212 12.so.0.12[.0] 1.132 + * 1.4.0beta9-14 14 10400 14.so.0.0[.0] 1.133 + * 1.2.13 13 10213 12.so.0.13[.0] 1.134 + * 1.4.0beta15-36 14 10400 14.so.0.0[.0] 1.135 + * 1.4.0beta37-87 14 10400 14.so.14.0[.0] 1.136 + * 1.4.0rc01 14 10400 14.so.14.0[.0] 1.137 + * 1.4.0beta88-109 14 10400 14.so.14.0[.0] 1.138 + * 1.4.0rc02-08 14 10400 14.so.14.0[.0] 1.139 + * 1.4.0 14 10400 14.so.14.0[.0] 1.140 + * 1.4.1beta01-03 14 10401 14.so.14.1[.0] 1.141 + * 1.4.1rc01 14 10401 14.so.14.1[.0] 1.142 + * 1.4.1beta04-12 14 10401 14.so.14.1[.0] 1.143 + * 1.4.1 14 10401 14.so.14.1[.0] 1.144 + * 1.4.2 14 10402 14.so.14.2[.0] 1.145 + * 1.4.3 14 10403 14.so.14.3[.0] 1.146 + * 1.4.4 14 10404 14.so.14.4[.0] 1.147 + * 1.5.0beta01-58 15 10500 15.so.15.0[.0] 1.148 + * 1.5.0rc01-07 15 10500 15.so.15.0[.0] 1.149 + * 1.5.0 15 10500 15.so.15.0[.0] 1.150 + * 1.5.1beta01-11 15 10501 15.so.15.1[.0] 1.151 + * 1.5.1rc01-02 15 10501 15.so.15.1[.0] 1.152 + * 1.5.1 15 10501 15.so.15.1[.0] 1.153 + * 1.5.2beta01-03 15 10502 15.so.15.2[.0] 1.154 + * 1.5.2rc01-03 15 10502 15.so.15.2[.0] 1.155 + * 1.5.2 15 10502 15.so.15.2[.0] 1.156 + * 1.5.3beta01-10 15 10503 15.so.15.3[.0] 1.157 + * 1.5.3rc01-02 15 10503 15.so.15.3[.0] 1.158 + * 1.5.3beta11 15 10503 15.so.15.3[.0] 1.159 + * 1.5.3 [omitted] 1.160 + * 1.5.4beta01-08 15 10504 15.so.15.4[.0] 1.161 + * 1.5.4rc01 15 10504 15.so.15.4[.0] 1.162 + * 1.5.4 15 10504 15.so.15.4[.0] 1.163 + * 1.5.5beta01-08 15 10505 15.so.15.5[.0] 1.164 + * 1.5.5rc01 15 10505 15.so.15.5[.0] 1.165 + * 1.5.5 15 10505 15.so.15.5[.0] 1.166 + * 1.5.6beta01-07 15 10506 15.so.15.6[.0] 1.167 + * 1.5.6rc01-03 15 10506 15.so.15.6[.0] 1.168 + * 1.5.6 15 10506 15.so.15.6[.0] 1.169 + * 1.5.7beta01-05 15 10507 15.so.15.7[.0] 1.170 + * 1.5.7rc01-03 15 10507 15.so.15.7[.0] 1.171 + * 1.5.7 15 10507 15.so.15.7[.0] 1.172 + * 1.6.0beta01-40 16 10600 16.so.16.0[.0] 1.173 + * 1.6.0rc01-08 16 10600 16.so.16.0[.0] 1.174 + * 1.6.0 16 10600 16.so.16.0[.0] 1.175 + * 1.6.1beta01-09 16 10601 16.so.16.1[.0] 1.176 + * 1.6.1rc01 16 10601 16.so.16.1[.0] 1.177 + * 1.6.1 16 10601 16.so.16.1[.0] 1.178 + * 1.6.2beta01 16 10602 16.so.16.2[.0] 1.179 + * 1.6.2rc01-06 16 10602 16.so.16.2[.0] 1.180 + * 1.6.2 16 10602 16.so.16.2[.0] 1.181 + * 1.6.3beta01-11 16 10603 16.so.16.3[.0] 1.182 + * 1.6.3rc01 16 10603 16.so.16.3[.0] 1.183 + * 1.6.3 16 10603 16.so.16.3[.0] 1.184 + * 1.6.4beta01-02 16 10604 16.so.16.4[.0] 1.185 + * 1.6.4rc01 16 10604 16.so.16.4[.0] 1.186 + * 1.6.4 16 10604 16.so.16.4[.0] 1.187 + * 1.6.5 16 10605 16.so.16.5[.0] 1.188 + * 1.6.6 16 10606 16.so.16.6[.0] 1.189 + * 1.6.7beta01-04 16 10607 16.so.16.7[.0] 1.190 + * 1.6.7rc01-03 16 10607 16.so.16.7[.0] 1.191 + * 1.6.7 16 10607 16.so.16.7[.0] 1.192 + * 1.6.8beta01-02 16 10608 16.so.16.8[.0] 1.193 + * 1.6.8rc01-02 16 10608 16.so.16.8[.0] 1.194 + * 1.6.8 16 10608 16.so.16.8[.0] 1.195 + * 1.6.9beta01-04 16 10609 16.so.16.9[.0] 1.196 + * 1.6.9rc01-02 16 10609 16.so.16.9[.0] 1.197 + * 1.6.9 16 10609 16.so.16.9[.0] 1.198 + * 1.6.10beta01-03 16 10610 16.so.16.10[.0] 1.199 + * 1.6.10betarc01-04 16 10610 16.so.16.10[.0] 1.200 + * 1.6.10beta 16 10610 16.so.16.10[.0] 1.201 + * 1.202 + * Henceforth the source version will match the shared-library major 1.203 + * and minor numbers; the shared-library major version number will be 1.204 + * used for changes in backward compatibility, as it is intended. The 1.205 + * PNG_LIBPNG_VER macro, which is not used within libpng but is available 1.206 + * for applications, is an unsigned integer of the form xyyzz corresponding 1.207 + * to the source version x.y.z (leading zeros in y and z). Beta versions 1.208 + * were given the previous public release number plus a letter, until 1.209 + * version 1.0.6j; from then on they were given the upcoming public 1.210 + * release number plus "betaNN" or "rcNN". 1.211 + * 1.212 + * Binary incompatibility exists only when applications make direct access 1.213 + * to the info_ptr or png_ptr members through png.h, and the compiled 1.214 + * application is loaded with a different version of the library. 1.215 + * 1.216 + * DLLNUM will change each time there are forward or backward changes 1.217 + * in binary compatibility (e.g., when a new feature is added). 1.218 + * 1.219 + * See libpng-manual.txt or libpng.3 for more information. The PNG 1.220 + * specification is available as a W3C Recommendation and as an ISO 1.221 + * Specification, <http://www.w3.org/TR/2003/REC-PNG-20031110/ 1.222 + */ 1.223 + 1.224 +/* 1.225 + * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: 1.226 + * 1.227 + * If you modify libpng you may insert additional notices immediately following 1.228 + * this sentence. 1.229 + * 1.230 + * This code is released under the libpng license. 1.231 + * 1.232 + * libpng versions 1.2.6, August 15, 2004, through 1.6.10, March 6, 2014, are 1.233 + * Copyright (c) 2004, 2006-2013 Glenn Randers-Pehrson, and are 1.234 + * distributed according to the same disclaimer and license as libpng-1.2.5 1.235 + * with the following individual added to the list of Contributing Authors: 1.236 + * 1.237 + * Cosmin Truta 1.238 + * 1.239 + * libpng versions 1.0.7, July 1, 2000, through 1.2.5, October 3, 2002, are 1.240 + * Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are 1.241 + * distributed according to the same disclaimer and license as libpng-1.0.6 1.242 + * with the following individuals added to the list of Contributing Authors: 1.243 + * 1.244 + * Simon-Pierre Cadieux 1.245 + * Eric S. Raymond 1.246 + * Gilles Vollant 1.247 + * 1.248 + * and with the following additions to the disclaimer: 1.249 + * 1.250 + * There is no warranty against interference with your enjoyment of the 1.251 + * library or against infringement. There is no warranty that our 1.252 + * efforts or the library will fulfill any of your particular purposes 1.253 + * or needs. This library is provided with all faults, and the entire 1.254 + * risk of satisfactory quality, performance, accuracy, and effort is with 1.255 + * the user. 1.256 + * 1.257 + * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are 1.258 + * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson, and are 1.259 + * distributed according to the same disclaimer and license as libpng-0.96, 1.260 + * with the following individuals added to the list of Contributing Authors: 1.261 + * 1.262 + * Tom Lane 1.263 + * Glenn Randers-Pehrson 1.264 + * Willem van Schaik 1.265 + * 1.266 + * libpng versions 0.89, June 1996, through 0.96, May 1997, are 1.267 + * Copyright (c) 1996, 1997 Andreas Dilger 1.268 + * Distributed according to the same disclaimer and license as libpng-0.88, 1.269 + * with the following individuals added to the list of Contributing Authors: 1.270 + * 1.271 + * John Bowler 1.272 + * Kevin Bracey 1.273 + * Sam Bushell 1.274 + * Magnus Holmgren 1.275 + * Greg Roelofs 1.276 + * Tom Tanner 1.277 + * 1.278 + * libpng versions 0.5, May 1995, through 0.88, January 1996, are 1.279 + * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. 1.280 + * 1.281 + * For the purposes of this copyright and license, "Contributing Authors" 1.282 + * is defined as the following set of individuals: 1.283 + * 1.284 + * Andreas Dilger 1.285 + * Dave Martindale 1.286 + * Guy Eric Schalnat 1.287 + * Paul Schmidt 1.288 + * Tim Wegner 1.289 + * 1.290 + * The PNG Reference Library is supplied "AS IS". The Contributing Authors 1.291 + * and Group 42, Inc. disclaim all warranties, expressed or implied, 1.292 + * including, without limitation, the warranties of merchantability and of 1.293 + * fitness for any purpose. The Contributing Authors and Group 42, Inc. 1.294 + * assume no liability for direct, indirect, incidental, special, exemplary, 1.295 + * or consequential damages, which may result from the use of the PNG 1.296 + * Reference Library, even if advised of the possibility of such damage. 1.297 + * 1.298 + * Permission is hereby granted to use, copy, modify, and distribute this 1.299 + * source code, or portions hereof, for any purpose, without fee, subject 1.300 + * to the following restrictions: 1.301 + * 1.302 + * 1. The origin of this source code must not be misrepresented. 1.303 + * 1.304 + * 2. Altered versions must be plainly marked as such and must not 1.305 + * be misrepresented as being the original source. 1.306 + * 1.307 + * 3. This Copyright notice may not be removed or altered from 1.308 + * any source or altered source distribution. 1.309 + * 1.310 + * The Contributing Authors and Group 42, Inc. specifically permit, without 1.311 + * fee, and encourage the use of this source code as a component to 1.312 + * supporting the PNG file format in commercial products. If you use this 1.313 + * source code in a product, acknowledgment is not required but would be 1.314 + * appreciated. 1.315 + */ 1.316 + 1.317 +/* 1.318 + * A "png_get_copyright" function is available, for convenient use in "about" 1.319 + * boxes and the like: 1.320 + * 1.321 + * printf("%s", png_get_copyright(NULL)); 1.322 + * 1.323 + * Also, the PNG logo (in PNG format, of course) is supplied in the 1.324 + * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). 1.325 + */ 1.326 + 1.327 +/* 1.328 + * Libpng is OSI Certified Open Source Software. OSI Certified is a 1.329 + * certification mark of the Open Source Initiative. 1.330 + */ 1.331 + 1.332 +/* 1.333 + * The contributing authors would like to thank all those who helped 1.334 + * with testing, bug fixes, and patience. This wouldn't have been 1.335 + * possible without all of you. 1.336 + * 1.337 + * Thanks to Frank J. T. Wojcik for helping with the documentation. 1.338 + */ 1.339 + 1.340 +/* 1.341 + * Y2K compliance in libpng: 1.342 + * ========================= 1.343 + * 1.344 + * March 6, 2014 1.345 + * 1.346 + * Since the PNG Development group is an ad-hoc body, we can't make 1.347 + * an official declaration. 1.348 + * 1.349 + * This is your unofficial assurance that libpng from version 0.71 and 1.350 + * upward through 1.6.10 are Y2K compliant. It is my belief that 1.351 + * earlier versions were also Y2K compliant. 1.352 + * 1.353 + * Libpng only has two year fields. One is a 2-byte unsigned integer 1.354 + * that will hold years up to 65535. The other, which is deprecated, 1.355 + * holds the date in text format, and will hold years up to 9999. 1.356 + * 1.357 + * The integer is 1.358 + * "png_uint_16 year" in png_time_struct. 1.359 + * 1.360 + * The string is 1.361 + * "char time_buffer[29]" in png_struct. This is no longer used 1.362 + * in libpng-1.6.x and will be removed from libpng-1.7.0. 1.363 + * 1.364 + * There are seven time-related functions: 1.365 + * png.c: png_convert_to_rfc_1123_buffer() in png.c 1.366 + * (formerly png_convert_to_rfc_1123() prior to libpng-1.5.x and 1.367 + * png_convert_to_rfc_1152() in error prior to libpng-0.98) 1.368 + * png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c 1.369 + * png_convert_from_time_t() in pngwrite.c 1.370 + * png_get_tIME() in pngget.c 1.371 + * png_handle_tIME() in pngrutil.c, called in pngread.c 1.372 + * png_set_tIME() in pngset.c 1.373 + * png_write_tIME() in pngwutil.c, called in pngwrite.c 1.374 + * 1.375 + * All handle dates properly in a Y2K environment. The 1.376 + * png_convert_from_time_t() function calls gmtime() to convert from system 1.377 + * clock time, which returns (year - 1900), which we properly convert to 1.378 + * the full 4-digit year. There is a possibility that libpng applications 1.379 + * are not passing 4-digit years into the png_convert_to_rfc_1123_buffer() 1.380 + * function, or that they are incorrectly passing only a 2-digit year 1.381 + * instead of "year - 1900" into the png_convert_from_struct_tm() function, 1.382 + * but this is not under our control. The libpng documentation has always 1.383 + * stated that it works with 4-digit years, and the APIs have been 1.384 + * documented as such. 1.385 + * 1.386 + * The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned 1.387 + * integer to hold the year, and can hold years as large as 65535. 1.388 + * 1.389 + * zlib, upon which libpng depends, is also Y2K compliant. It contains 1.390 + * no date-related code. 1.391 + * 1.392 + * Glenn Randers-Pehrson 1.393 + * libpng maintainer 1.394 + * PNG Development Group 1.395 + */ 1.396 + 1.397 +#ifndef PNG_H 1.398 +#define PNG_H 1.399 + 1.400 +/* This is not the place to learn how to use libpng. The file libpng-manual.txt 1.401 + * describes how to use libpng, and the file example.c summarizes it 1.402 + * with some code on which to build. This file is useful for looking 1.403 + * at the actual function definitions and structure components. 1.404 + * 1.405 + * If you just need to read a PNG file and don't want to read the documentation 1.406 + * skip to the end of this file and read the section entitled 'simplified API'. 1.407 + */ 1.408 + 1.409 +/* Version information for png.h - this should match the version in png.c */ 1.410 +#define PNG_LIBPNG_VER_STRING "1.6.10" 1.411 +#define PNG_HEADER_VERSION_STRING \ 1.412 + " libpng version 1.6.10 - March 6, 2014\n" 1.413 + 1.414 +#define PNG_LIBPNG_VER_SONUM 16 1.415 +#define PNG_LIBPNG_VER_DLLNUM 16 1.416 + 1.417 +/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */ 1.418 +#define PNG_LIBPNG_VER_MAJOR 1 1.419 +#define PNG_LIBPNG_VER_MINOR 6 1.420 +#define PNG_LIBPNG_VER_RELEASE 10 1.421 + 1.422 +/* This should match the numeric part of the final component of 1.423 + * PNG_LIBPNG_VER_STRING, omitting any leading zero: 1.424 + */ 1.425 + 1.426 +#define PNG_LIBPNG_VER_BUILD 0 1.427 + 1.428 +/* Release Status */ 1.429 +#define PNG_LIBPNG_BUILD_ALPHA 1 1.430 +#define PNG_LIBPNG_BUILD_BETA 2 1.431 +#define PNG_LIBPNG_BUILD_RC 3 1.432 +#define PNG_LIBPNG_BUILD_STABLE 4 1.433 +#define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7 1.434 + 1.435 +/* Release-Specific Flags */ 1.436 +#define PNG_LIBPNG_BUILD_PATCH 8 /* Can be OR'ed with 1.437 + PNG_LIBPNG_BUILD_STABLE only */ 1.438 +#define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with 1.439 + PNG_LIBPNG_BUILD_SPECIAL */ 1.440 +#define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with 1.441 + PNG_LIBPNG_BUILD_PRIVATE */ 1.442 + 1.443 +#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_STABLE 1.444 + 1.445 +/* Careful here. At one time, Guy wanted to use 082, but that would be octal. 1.446 + * We must not include leading zeros. 1.447 + * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only 1.448 + * version 1.0.0 was mis-numbered 100 instead of 10000). From 1.449 + * version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release 1.450 + */ 1.451 +#define PNG_LIBPNG_VER 10610 /* 1.6.10 */ 1.452 + 1.453 +/* Library configuration: these options cannot be changed after 1.454 + * the library has been built. 1.455 + */ 1.456 + 1.457 +#define PNG_APNG_SUPPORTED 1.458 +#define PNG_READ_APNG_SUPPORTED 1.459 +#define PNG_WRITE_APNG_SUPPORTED 1.460 + 1.461 +#ifndef PNG_VERSION_INFO_ONLY 1.462 + /* Machine specific configuration. */ 1.463 +# include "mozpngconf.h" 1.464 +# include "pngconf.h" 1.465 +#endif 1.466 + 1.467 +/* 1.468 + * Added at libpng-1.2.8 1.469 + * 1.470 + * Ref MSDN: Private as priority over Special 1.471 + * VS_FF_PRIVATEBUILD File *was not* built using standard release 1.472 + * procedures. If this value is given, the StringFileInfo block must 1.473 + * contain a PrivateBuild string. 1.474 + * 1.475 + * VS_FF_SPECIALBUILD File *was* built by the original company using 1.476 + * standard release procedures but is a variation of the standard 1.477 + * file of the same version number. If this value is given, the 1.478 + * StringFileInfo block must contain a SpecialBuild string. 1.479 + */ 1.480 + 1.481 +#ifdef PNG_USER_PRIVATEBUILD /* From pnglibconf.h */ 1.482 +# define PNG_LIBPNG_BUILD_TYPE \ 1.483 + (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE) 1.484 +#else 1.485 +# ifdef PNG_LIBPNG_SPECIALBUILD 1.486 +# define PNG_LIBPNG_BUILD_TYPE \ 1.487 + (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL) 1.488 +# else 1.489 +# define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE) 1.490 +# endif 1.491 +#endif 1.492 + 1.493 +#ifndef PNG_VERSION_INFO_ONLY 1.494 + 1.495 +/* Inhibit C++ name-mangling for libpng functions but not for system calls. */ 1.496 +#ifdef __cplusplus 1.497 +extern "C" { 1.498 +#endif /* __cplusplus */ 1.499 + 1.500 +/* Version information for C files, stored in png.c. This had better match 1.501 + * the version above. 1.502 + */ 1.503 +#define png_libpng_ver png_get_header_ver(NULL) 1.504 + 1.505 +/* This file is arranged in several sections: 1.506 + * 1.507 + * 1. Any configuration options that can be specified by for the application 1.508 + * code when it is built. (Build time configuration is in pnglibconf.h) 1.509 + * 2. Type definitions (base types are defined in pngconf.h), structure 1.510 + * definitions. 1.511 + * 3. Exported library functions. 1.512 + * 4. Simplified API. 1.513 + * 1.514 + * The library source code has additional files (principally pngpriv.h) that 1.515 + * allow configuration of the library. 1.516 + */ 1.517 +/* Section 1: run time configuration 1.518 + * See pnglibconf.h for build time configuration 1.519 + * 1.520 + * Run time configuration allows the application to choose between 1.521 + * implementations of certain arithmetic APIs. The default is set 1.522 + * at build time and recorded in pnglibconf.h, but it is safe to 1.523 + * override these (and only these) settings. Note that this won't 1.524 + * change what the library does, only application code, and the 1.525 + * settings can (and probably should) be made on a per-file basis 1.526 + * by setting the #defines before including png.h 1.527 + * 1.528 + * Use macros to read integers from PNG data or use the exported 1.529 + * functions? 1.530 + * PNG_USE_READ_MACROS: use the macros (see below) Note that 1.531 + * the macros evaluate their argument multiple times. 1.532 + * PNG_NO_USE_READ_MACROS: call the relevant library function. 1.533 + * 1.534 + * Use the alternative algorithm for compositing alpha samples that 1.535 + * does not use division? 1.536 + * PNG_READ_COMPOSITE_NODIV_SUPPORTED: use the 'no division' 1.537 + * algorithm. 1.538 + * PNG_NO_READ_COMPOSITE_NODIV: use the 'division' algorithm. 1.539 + * 1.540 + * How to handle benign errors if PNG_ALLOW_BENIGN_ERRORS is 1.541 + * false? 1.542 + * PNG_ALLOW_BENIGN_ERRORS: map calls to the benign error 1.543 + * APIs to png_warning. 1.544 + * Otherwise the calls are mapped to png_error. 1.545 + */ 1.546 + 1.547 +/* Section 2: type definitions, including structures and compile time 1.548 + * constants. 1.549 + * See pngconf.h for base types that vary by machine/system 1.550 + */ 1.551 + 1.552 +#ifdef PNG_APNG_SUPPORTED 1.553 +/* dispose_op flags from inside fcTL */ 1.554 +#define PNG_DISPOSE_OP_NONE 0x00 1.555 +#define PNG_DISPOSE_OP_BACKGROUND 0x01 1.556 +#define PNG_DISPOSE_OP_PREVIOUS 0x02 1.557 + 1.558 +/* blend_op flags from inside fcTL */ 1.559 +#define PNG_BLEND_OP_SOURCE 0x00 1.560 +#define PNG_BLEND_OP_OVER 0x01 1.561 +#endif /* PNG_APNG_SUPPORTED */ 1.562 + 1.563 +/* This triggers a compiler error in png.c, if png.c and png.h 1.564 + * do not agree upon the version number. 1.565 + */ 1.566 +typedef char* png_libpng_version_1_6_10; 1.567 + 1.568 +/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info. 1.569 + * 1.570 + * png_struct is the cache of information used while reading or writing a single 1.571 + * PNG file. One of these is always required, although the simplified API 1.572 + * (below) hides the creation and destruction of it. 1.573 + */ 1.574 +typedef struct png_struct_def png_struct; 1.575 +typedef const png_struct * png_const_structp; 1.576 +typedef png_struct * png_structp; 1.577 +typedef png_struct * * png_structpp; 1.578 + 1.579 +/* png_info contains information read from or to be written to a PNG file. One 1.580 + * or more of these must exist while reading or creating a PNG file. The 1.581 + * information is not used by libpng during read but is used to control what 1.582 + * gets written when a PNG file is created. "png_get_" function calls read 1.583 + * information during read and "png_set_" functions calls write information 1.584 + * when creating a PNG. 1.585 + * been moved into a separate header file that is not accessible to 1.586 + * applications. Read libpng-manual.txt or libpng.3 for more info. 1.587 + */ 1.588 +typedef struct png_info_def png_info; 1.589 +typedef png_info * png_infop; 1.590 +typedef const png_info * png_const_infop; 1.591 +typedef png_info * * png_infopp; 1.592 + 1.593 +/* Types with names ending 'p' are pointer types. The corresponding types with 1.594 + * names ending 'rp' are identical pointer types except that the pointer is 1.595 + * marked 'restrict', which means that it is the only pointer to the object 1.596 + * passed to the function. Applications should not use the 'restrict' types; 1.597 + * it is always valid to pass 'p' to a pointer with a function argument of the 1.598 + * corresponding 'rp' type. Different compilers have different rules with 1.599 + * regard to type matching in the presence of 'restrict'. For backward 1.600 + * compatibility libpng callbacks never have 'restrict' in their parameters and, 1.601 + * consequentially, writing portable application code is extremely difficult if 1.602 + * an attempt is made to use 'restrict'. 1.603 + */ 1.604 +typedef png_struct * PNG_RESTRICT png_structrp; 1.605 +typedef const png_struct * PNG_RESTRICT png_const_structrp; 1.606 +typedef png_info * PNG_RESTRICT png_inforp; 1.607 +typedef const png_info * PNG_RESTRICT png_const_inforp; 1.608 + 1.609 +/* Three color definitions. The order of the red, green, and blue, (and the 1.610 + * exact size) is not important, although the size of the fields need to 1.611 + * be png_byte or png_uint_16 (as defined below). 1.612 + */ 1.613 +typedef struct png_color_struct 1.614 +{ 1.615 + png_byte red; 1.616 + png_byte green; 1.617 + png_byte blue; 1.618 +} png_color; 1.619 +typedef png_color * png_colorp; 1.620 +typedef const png_color * png_const_colorp; 1.621 +typedef png_color * * png_colorpp; 1.622 + 1.623 +typedef struct png_color_16_struct 1.624 +{ 1.625 + png_byte index; /* used for palette files */ 1.626 + png_uint_16 red; /* for use in red green blue files */ 1.627 + png_uint_16 green; 1.628 + png_uint_16 blue; 1.629 + png_uint_16 gray; /* for use in grayscale files */ 1.630 +} png_color_16; 1.631 +typedef png_color_16 * png_color_16p; 1.632 +typedef const png_color_16 * png_const_color_16p; 1.633 +typedef png_color_16 * * png_color_16pp; 1.634 + 1.635 +typedef struct png_color_8_struct 1.636 +{ 1.637 + png_byte red; /* for use in red green blue files */ 1.638 + png_byte green; 1.639 + png_byte blue; 1.640 + png_byte gray; /* for use in grayscale files */ 1.641 + png_byte alpha; /* for alpha channel files */ 1.642 +} png_color_8; 1.643 +typedef png_color_8 * png_color_8p; 1.644 +typedef const png_color_8 * png_const_color_8p; 1.645 +typedef png_color_8 * * png_color_8pp; 1.646 + 1.647 +/* 1.648 + * The following two structures are used for the in-core representation 1.649 + * of sPLT chunks. 1.650 + */ 1.651 +typedef struct png_sPLT_entry_struct 1.652 +{ 1.653 + png_uint_16 red; 1.654 + png_uint_16 green; 1.655 + png_uint_16 blue; 1.656 + png_uint_16 alpha; 1.657 + png_uint_16 frequency; 1.658 +} png_sPLT_entry; 1.659 +typedef png_sPLT_entry * png_sPLT_entryp; 1.660 +typedef const png_sPLT_entry * png_const_sPLT_entryp; 1.661 +typedef png_sPLT_entry * * png_sPLT_entrypp; 1.662 + 1.663 +/* When the depth of the sPLT palette is 8 bits, the color and alpha samples 1.664 + * occupy the LSB of their respective members, and the MSB of each member 1.665 + * is zero-filled. The frequency member always occupies the full 16 bits. 1.666 + */ 1.667 + 1.668 +typedef struct png_sPLT_struct 1.669 +{ 1.670 + png_charp name; /* palette name */ 1.671 + png_byte depth; /* depth of palette samples */ 1.672 + png_sPLT_entryp entries; /* palette entries */ 1.673 + png_int_32 nentries; /* number of palette entries */ 1.674 +} png_sPLT_t; 1.675 +typedef png_sPLT_t * png_sPLT_tp; 1.676 +typedef const png_sPLT_t * png_const_sPLT_tp; 1.677 +typedef png_sPLT_t * * png_sPLT_tpp; 1.678 + 1.679 +#ifdef PNG_TEXT_SUPPORTED 1.680 +/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file, 1.681 + * and whether that contents is compressed or not. The "key" field 1.682 + * points to a regular zero-terminated C string. The "text" fields can be a 1.683 + * regular C string, an empty string, or a NULL pointer. 1.684 + * However, the structure returned by png_get_text() will always contain 1.685 + * the "text" field as a regular zero-terminated C string (possibly 1.686 + * empty), never a NULL pointer, so it can be safely used in printf() and 1.687 + * other string-handling functions. Note that the "itxt_length", "lang", and 1.688 + * "lang_key" members of the structure only exist when the library is built 1.689 + * with iTXt chunk support. Prior to libpng-1.4.0 the library was built by 1.690 + * default without iTXt support. Also note that when iTXt *is* supported, 1.691 + * the "lang" and "lang_key" fields contain NULL pointers when the 1.692 + * "compression" field contains * PNG_TEXT_COMPRESSION_NONE or 1.693 + * PNG_TEXT_COMPRESSION_zTXt. Note that the "compression value" is not the 1.694 + * same as what appears in the PNG tEXt/zTXt/iTXt chunk's "compression flag" 1.695 + * which is always 0 or 1, or its "compression method" which is always 0. 1.696 + */ 1.697 +typedef struct png_text_struct 1.698 +{ 1.699 + int compression; /* compression value: 1.700 + -1: tEXt, none 1.701 + 0: zTXt, deflate 1.702 + 1: iTXt, none 1.703 + 2: iTXt, deflate */ 1.704 + png_charp key; /* keyword, 1-79 character description of "text" */ 1.705 + png_charp text; /* comment, may be an empty string (ie "") 1.706 + or a NULL pointer */ 1.707 + png_size_t text_length; /* length of the text string */ 1.708 + png_size_t itxt_length; /* length of the itxt string */ 1.709 + png_charp lang; /* language code, 0-79 characters 1.710 + or a NULL pointer */ 1.711 + png_charp lang_key; /* keyword translated UTF-8 string, 0 or more 1.712 + chars or a NULL pointer */ 1.713 +} png_text; 1.714 +typedef png_text * png_textp; 1.715 +typedef const png_text * png_const_textp; 1.716 +typedef png_text * * png_textpp; 1.717 +#endif 1.718 + 1.719 +/* Supported compression types for text in PNG files (tEXt, and zTXt). 1.720 + * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */ 1.721 +#define PNG_TEXT_COMPRESSION_NONE_WR -3 1.722 +#define PNG_TEXT_COMPRESSION_zTXt_WR -2 1.723 +#define PNG_TEXT_COMPRESSION_NONE -1 1.724 +#define PNG_TEXT_COMPRESSION_zTXt 0 1.725 +#define PNG_ITXT_COMPRESSION_NONE 1 1.726 +#define PNG_ITXT_COMPRESSION_zTXt 2 1.727 +#define PNG_TEXT_COMPRESSION_LAST 3 /* Not a valid value */ 1.728 + 1.729 +/* png_time is a way to hold the time in an machine independent way. 1.730 + * Two conversions are provided, both from time_t and struct tm. There 1.731 + * is no portable way to convert to either of these structures, as far 1.732 + * as I know. If you know of a portable way, send it to me. As a side 1.733 + * note - PNG has always been Year 2000 compliant! 1.734 + */ 1.735 +typedef struct png_time_struct 1.736 +{ 1.737 + png_uint_16 year; /* full year, as in, 1995 */ 1.738 + png_byte month; /* month of year, 1 - 12 */ 1.739 + png_byte day; /* day of month, 1 - 31 */ 1.740 + png_byte hour; /* hour of day, 0 - 23 */ 1.741 + png_byte minute; /* minute of hour, 0 - 59 */ 1.742 + png_byte second; /* second of minute, 0 - 60 (for leap seconds) */ 1.743 +} png_time; 1.744 +typedef png_time * png_timep; 1.745 +typedef const png_time * png_const_timep; 1.746 +typedef png_time * * png_timepp; 1.747 + 1.748 +#if defined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED) ||\ 1.749 + defined(PNG_USER_CHUNKS_SUPPORTED) 1.750 +/* png_unknown_chunk is a structure to hold queued chunks for which there is 1.751 + * no specific support. The idea is that we can use this to queue 1.752 + * up private chunks for output even though the library doesn't actually 1.753 + * know about their semantics. 1.754 + * 1.755 + * The data in the structure is set by libpng on read and used on write. 1.756 + */ 1.757 +typedef struct png_unknown_chunk_t 1.758 +{ 1.759 + png_byte name[5]; /* Textual chunk name with '\0' terminator */ 1.760 + png_byte *data; /* Data, should not be modified on read! */ 1.761 + png_size_t size; 1.762 + 1.763 + /* On write 'location' must be set using the flag values listed below. 1.764 + * Notice that on read it is set by libpng however the values stored have 1.765 + * more bits set than are listed below. Always treat the value as a 1.766 + * bitmask. On write set only one bit - setting multiple bits may cause the 1.767 + * chunk to be written in multiple places. 1.768 + */ 1.769 + png_byte location; /* mode of operation at read time */ 1.770 +} 1.771 +png_unknown_chunk; 1.772 + 1.773 +typedef png_unknown_chunk * png_unknown_chunkp; 1.774 +typedef const png_unknown_chunk * png_const_unknown_chunkp; 1.775 +typedef png_unknown_chunk * * png_unknown_chunkpp; 1.776 +#endif 1.777 + 1.778 +/* Flag values for the unknown chunk location byte. */ 1.779 +#define PNG_HAVE_IHDR 0x01 1.780 +#define PNG_HAVE_PLTE 0x02 1.781 +#define PNG_AFTER_IDAT 0x08 1.782 + 1.783 +/* Maximum positive integer used in PNG is (2^31)-1 */ 1.784 +#define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL) 1.785 +#define PNG_UINT_32_MAX ((png_uint_32)(-1)) 1.786 +#define PNG_SIZE_MAX ((png_size_t)(-1)) 1.787 + 1.788 +/* These are constants for fixed point values encoded in the 1.789 + * PNG specification manner (x100000) 1.790 + */ 1.791 +#define PNG_FP_1 100000 1.792 +#define PNG_FP_HALF 50000 1.793 +#define PNG_FP_MAX ((png_fixed_point)0x7fffffffL) 1.794 +#define PNG_FP_MIN (-PNG_FP_MAX) 1.795 + 1.796 +/* These describe the color_type field in png_info. */ 1.797 +/* color type masks */ 1.798 +#define PNG_COLOR_MASK_PALETTE 1 1.799 +#define PNG_COLOR_MASK_COLOR 2 1.800 +#define PNG_COLOR_MASK_ALPHA 4 1.801 + 1.802 +/* color types. Note that not all combinations are legal */ 1.803 +#define PNG_COLOR_TYPE_GRAY 0 1.804 +#define PNG_COLOR_TYPE_PALETTE (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE) 1.805 +#define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR) 1.806 +#define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA) 1.807 +#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA) 1.808 +/* aliases */ 1.809 +#define PNG_COLOR_TYPE_RGBA PNG_COLOR_TYPE_RGB_ALPHA 1.810 +#define PNG_COLOR_TYPE_GA PNG_COLOR_TYPE_GRAY_ALPHA 1.811 + 1.812 +/* This is for compression type. PNG 1.0-1.2 only define the single type. */ 1.813 +#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */ 1.814 +#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE 1.815 + 1.816 +/* This is for filter type. PNG 1.0-1.2 only define the single type. */ 1.817 +#define PNG_FILTER_TYPE_BASE 0 /* Single row per-byte filtering */ 1.818 +#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */ 1.819 +#define PNG_FILTER_TYPE_DEFAULT PNG_FILTER_TYPE_BASE 1.820 + 1.821 +/* These are for the interlacing type. These values should NOT be changed. */ 1.822 +#define PNG_INTERLACE_NONE 0 /* Non-interlaced image */ 1.823 +#define PNG_INTERLACE_ADAM7 1 /* Adam7 interlacing */ 1.824 +#define PNG_INTERLACE_LAST 2 /* Not a valid value */ 1.825 + 1.826 +/* These are for the oFFs chunk. These values should NOT be changed. */ 1.827 +#define PNG_OFFSET_PIXEL 0 /* Offset in pixels */ 1.828 +#define PNG_OFFSET_MICROMETER 1 /* Offset in micrometers (1/10^6 meter) */ 1.829 +#define PNG_OFFSET_LAST 2 /* Not a valid value */ 1.830 + 1.831 +/* These are for the pCAL chunk. These values should NOT be changed. */ 1.832 +#define PNG_EQUATION_LINEAR 0 /* Linear transformation */ 1.833 +#define PNG_EQUATION_BASE_E 1 /* Exponential base e transform */ 1.834 +#define PNG_EQUATION_ARBITRARY 2 /* Arbitrary base exponential transform */ 1.835 +#define PNG_EQUATION_HYPERBOLIC 3 /* Hyperbolic sine transformation */ 1.836 +#define PNG_EQUATION_LAST 4 /* Not a valid value */ 1.837 + 1.838 +/* These are for the sCAL chunk. These values should NOT be changed. */ 1.839 +#define PNG_SCALE_UNKNOWN 0 /* unknown unit (image scale) */ 1.840 +#define PNG_SCALE_METER 1 /* meters per pixel */ 1.841 +#define PNG_SCALE_RADIAN 2 /* radians per pixel */ 1.842 +#define PNG_SCALE_LAST 3 /* Not a valid value */ 1.843 + 1.844 +/* These are for the pHYs chunk. These values should NOT be changed. */ 1.845 +#define PNG_RESOLUTION_UNKNOWN 0 /* pixels/unknown unit (aspect ratio) */ 1.846 +#define PNG_RESOLUTION_METER 1 /* pixels/meter */ 1.847 +#define PNG_RESOLUTION_LAST 2 /* Not a valid value */ 1.848 + 1.849 +/* These are for the sRGB chunk. These values should NOT be changed. */ 1.850 +#define PNG_sRGB_INTENT_PERCEPTUAL 0 1.851 +#define PNG_sRGB_INTENT_RELATIVE 1 1.852 +#define PNG_sRGB_INTENT_SATURATION 2 1.853 +#define PNG_sRGB_INTENT_ABSOLUTE 3 1.854 +#define PNG_sRGB_INTENT_LAST 4 /* Not a valid value */ 1.855 + 1.856 +/* This is for text chunks */ 1.857 +#define PNG_KEYWORD_MAX_LENGTH 79 1.858 + 1.859 +/* Maximum number of entries in PLTE/sPLT/tRNS arrays */ 1.860 +#define PNG_MAX_PALETTE_LENGTH 256 1.861 + 1.862 +/* These determine if an ancillary chunk's data has been successfully read 1.863 + * from the PNG header, or if the application has filled in the corresponding 1.864 + * data in the info_struct to be written into the output file. The values 1.865 + * of the PNG_INFO_<chunk> defines should NOT be changed. 1.866 + */ 1.867 +#define PNG_INFO_gAMA 0x0001 1.868 +#define PNG_INFO_sBIT 0x0002 1.869 +#define PNG_INFO_cHRM 0x0004 1.870 +#define PNG_INFO_PLTE 0x0008 1.871 +#define PNG_INFO_tRNS 0x0010 1.872 +#define PNG_INFO_bKGD 0x0020 1.873 +#define PNG_INFO_hIST 0x0040 1.874 +#define PNG_INFO_pHYs 0x0080 1.875 +#define PNG_INFO_oFFs 0x0100 1.876 +#define PNG_INFO_tIME 0x0200 1.877 +#define PNG_INFO_pCAL 0x0400 1.878 +#define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */ 1.879 +#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */ 1.880 +#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */ 1.881 +#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */ 1.882 +#define PNG_INFO_IDAT 0x8000 /* ESR, 1.0.6 */ 1.883 +#ifdef PNG_APNG_SUPPORTED 1.884 +#define PNG_INFO_acTL 0x10000 1.885 +#define PNG_INFO_fcTL 0x20000 1.886 +#endif 1.887 + 1.888 +/* This is used for the transformation routines, as some of them 1.889 + * change these values for the row. It also should enable using 1.890 + * the routines for other purposes. 1.891 + */ 1.892 +typedef struct png_row_info_struct 1.893 +{ 1.894 + png_uint_32 width; /* width of row */ 1.895 + png_size_t rowbytes; /* number of bytes in row */ 1.896 + png_byte color_type; /* color type of row */ 1.897 + png_byte bit_depth; /* bit depth of row */ 1.898 + png_byte channels; /* number of channels (1, 2, 3, or 4) */ 1.899 + png_byte pixel_depth; /* bits per pixel (depth * channels) */ 1.900 +} png_row_info; 1.901 + 1.902 +typedef png_row_info * png_row_infop; 1.903 +typedef png_row_info * * png_row_infopp; 1.904 + 1.905 +/* These are the function types for the I/O functions and for the functions 1.906 + * that allow the user to override the default I/O functions with his or her 1.907 + * own. The png_error_ptr type should match that of user-supplied warning 1.908 + * and error functions, while the png_rw_ptr type should match that of the 1.909 + * user read/write data functions. Note that the 'write' function must not 1.910 + * modify the buffer it is passed. The 'read' function, on the other hand, is 1.911 + * expected to return the read data in the buffer. 1.912 + */ 1.913 +typedef PNG_CALLBACK(void, *png_error_ptr, (png_structp, png_const_charp)); 1.914 +typedef PNG_CALLBACK(void, *png_rw_ptr, (png_structp, png_bytep, png_size_t)); 1.915 +typedef PNG_CALLBACK(void, *png_flush_ptr, (png_structp)); 1.916 +typedef PNG_CALLBACK(void, *png_read_status_ptr, (png_structp, png_uint_32, 1.917 + int)); 1.918 +typedef PNG_CALLBACK(void, *png_write_status_ptr, (png_structp, png_uint_32, 1.919 + int)); 1.920 + 1.921 +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED 1.922 +typedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop)); 1.923 +typedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop)); 1.924 +#ifdef PNG_APNG_SUPPORTED 1.925 +typedef PNG_CALLBACK(void, *png_progressive_frame_ptr, (png_structp, 1.926 + png_uint_32)); 1.927 +#endif 1.928 + 1.929 +/* The following callback receives png_uint_32 row_number, int pass for the 1.930 + * png_bytep data of the row. When transforming an interlaced image the 1.931 + * row number is the row number within the sub-image of the interlace pass, so 1.932 + * the value will increase to the height of the sub-image (not the full image) 1.933 + * then reset to 0 for the next pass. 1.934 + * 1.935 + * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to 1.936 + * find the output pixel (x,y) given an interlaced sub-image pixel 1.937 + * (row,col,pass). (See below for these macros.) 1.938 + */ 1.939 +typedef PNG_CALLBACK(void, *png_progressive_row_ptr, (png_structp, png_bytep, 1.940 + png_uint_32, int)); 1.941 +#endif 1.942 + 1.943 +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ 1.944 + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) 1.945 +typedef PNG_CALLBACK(void, *png_user_transform_ptr, (png_structp, png_row_infop, 1.946 + png_bytep)); 1.947 +#endif 1.948 + 1.949 +#ifdef PNG_USER_CHUNKS_SUPPORTED 1.950 +typedef PNG_CALLBACK(int, *png_user_chunk_ptr, (png_structp, 1.951 + png_unknown_chunkp)); 1.952 +#endif 1.953 +#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED 1.954 +/* not used anywhere */ 1.955 +/* typedef PNG_CALLBACK(void, *png_unknown_chunk_ptr, (png_structp)); */ 1.956 +#endif 1.957 + 1.958 +#ifdef PNG_SETJMP_SUPPORTED 1.959 +/* This must match the function definition in <setjmp.h>, and the application 1.960 + * must include this before png.h to obtain the definition of jmp_buf. The 1.961 + * function is required to be PNG_NORETURN, but this is not checked. If the 1.962 + * function does return the application will crash via an abort() or similar 1.963 + * system level call. 1.964 + * 1.965 + * If you get a warning here while building the library you may need to make 1.966 + * changes to ensure that pnglibconf.h records the calling convention used by 1.967 + * your compiler. This may be very difficult - try using a different compiler 1.968 + * to build the library! 1.969 + */ 1.970 +PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), PNGARG((jmp_buf, int)), typedef); 1.971 +#endif 1.972 + 1.973 +/* Transform masks for the high-level interface */ 1.974 +#define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */ 1.975 +#define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */ 1.976 +#define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */ 1.977 +#define PNG_TRANSFORM_PACKING 0x0004 /* read and write */ 1.978 +#define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */ 1.979 +#define PNG_TRANSFORM_EXPAND 0x0010 /* read only */ 1.980 +#define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */ 1.981 +#define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */ 1.982 +#define PNG_TRANSFORM_BGR 0x0080 /* read and write */ 1.983 +#define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */ 1.984 +#define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */ 1.985 +#define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */ 1.986 +#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* write only */ 1.987 +/* Added to libpng-1.2.34 */ 1.988 +#define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER 1.989 +#define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */ 1.990 +/* Added to libpng-1.4.0 */ 1.991 +#define PNG_TRANSFORM_GRAY_TO_RGB 0x2000 /* read only */ 1.992 +/* Added to libpng-1.5.4 */ 1.993 +#define PNG_TRANSFORM_EXPAND_16 0x4000 /* read only */ 1.994 +#define PNG_TRANSFORM_SCALE_16 0x8000 /* read only */ 1.995 + 1.996 +/* Flags for MNG supported features */ 1.997 +#define PNG_FLAG_MNG_EMPTY_PLTE 0x01 1.998 +#define PNG_FLAG_MNG_FILTER_64 0x04 1.999 +#define PNG_ALL_MNG_FEATURES 0x05 1.1000 + 1.1001 +/* NOTE: prior to 1.5 these functions had no 'API' style declaration, 1.1002 + * this allowed the zlib default functions to be used on Windows 1.1003 + * platforms. In 1.5 the zlib default malloc (which just calls malloc and 1.1004 + * ignores the first argument) should be completely compatible with the 1.1005 + * following. 1.1006 + */ 1.1007 +typedef PNG_CALLBACK(png_voidp, *png_malloc_ptr, (png_structp, 1.1008 + png_alloc_size_t)); 1.1009 +typedef PNG_CALLBACK(void, *png_free_ptr, (png_structp, png_voidp)); 1.1010 + 1.1011 +/* Section 3: exported functions 1.1012 + * Here are the function definitions most commonly used. This is not 1.1013 + * the place to find out how to use libpng. See libpng-manual.txt for the 1.1014 + * full explanation, see example.c for the summary. This just provides 1.1015 + * a simple one line description of the use of each function. 1.1016 + * 1.1017 + * The PNG_EXPORT() and PNG_EXPORTA() macros used below are defined in 1.1018 + * pngconf.h and in the *.dfn files in the scripts directory. 1.1019 + * 1.1020 + * PNG_EXPORT(ordinal, type, name, (args)); 1.1021 + * 1.1022 + * ordinal: ordinal that is used while building 1.1023 + * *.def files. The ordinal value is only 1.1024 + * relevant when preprocessing png.h with 1.1025 + * the *.dfn files for building symbol table 1.1026 + * entries, and are removed by pngconf.h. 1.1027 + * type: return type of the function 1.1028 + * name: function name 1.1029 + * args: function arguments, with types 1.1030 + * 1.1031 + * When we wish to append attributes to a function prototype we use 1.1032 + * the PNG_EXPORTA() macro instead. 1.1033 + * 1.1034 + * PNG_EXPORTA(ordinal, type, name, (args), attributes); 1.1035 + * 1.1036 + * ordinal, type, name, and args: same as in PNG_EXPORT(). 1.1037 + * attributes: function attributes 1.1038 + */ 1.1039 + 1.1040 +/* Returns the version number of the library */ 1.1041 +PNG_EXPORT(1, png_uint_32, png_access_version_number, (void)); 1.1042 + 1.1043 +/* Tell lib we have already handled the first <num_bytes> magic bytes. 1.1044 + * Handling more than 8 bytes from the beginning of the file is an error. 1.1045 + */ 1.1046 +PNG_EXPORT(2, void, png_set_sig_bytes, (png_structrp png_ptr, int num_bytes)); 1.1047 + 1.1048 +/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a 1.1049 + * PNG file. Returns zero if the supplied bytes match the 8-byte PNG 1.1050 + * signature, and non-zero otherwise. Having num_to_check == 0 or 1.1051 + * start > 7 will always fail (ie return non-zero). 1.1052 + */ 1.1053 +PNG_EXPORT(3, int, png_sig_cmp, (png_const_bytep sig, png_size_t start, 1.1054 + png_size_t num_to_check)); 1.1055 + 1.1056 +/* Simple signature checking function. This is the same as calling 1.1057 + * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n). 1.1058 + */ 1.1059 +#define png_check_sig(sig, n) !png_sig_cmp((sig), 0, (n)) 1.1060 + 1.1061 +/* Allocate and initialize png_ptr struct for reading, and any other memory. */ 1.1062 +PNG_EXPORTA(4, png_structp, png_create_read_struct, 1.1063 + (png_const_charp user_png_ver, png_voidp error_ptr, 1.1064 + png_error_ptr error_fn, png_error_ptr warn_fn), 1.1065 + PNG_ALLOCATED); 1.1066 + 1.1067 +/* Allocate and initialize png_ptr struct for writing, and any other memory */ 1.1068 +PNG_EXPORTA(5, png_structp, png_create_write_struct, 1.1069 + (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, 1.1070 + png_error_ptr warn_fn), 1.1071 + PNG_ALLOCATED); 1.1072 + 1.1073 +PNG_EXPORT(6, png_size_t, png_get_compression_buffer_size, 1.1074 + (png_const_structrp png_ptr)); 1.1075 + 1.1076 +PNG_EXPORT(7, void, png_set_compression_buffer_size, (png_structrp png_ptr, 1.1077 + png_size_t size)); 1.1078 + 1.1079 +/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp 1.1080 + * match up. 1.1081 + */ 1.1082 +#ifdef PNG_SETJMP_SUPPORTED 1.1083 +/* This function returns the jmp_buf built in to *png_ptr. It must be 1.1084 + * supplied with an appropriate 'longjmp' function to use on that jmp_buf 1.1085 + * unless the default error function is overridden in which case NULL is 1.1086 + * acceptable. The size of the jmp_buf is checked against the actual size 1.1087 + * allocated by the library - the call will return NULL on a mismatch 1.1088 + * indicating an ABI mismatch. 1.1089 + */ 1.1090 +PNG_EXPORT(8, jmp_buf*, png_set_longjmp_fn, (png_structrp png_ptr, 1.1091 + png_longjmp_ptr longjmp_fn, size_t jmp_buf_size)); 1.1092 +# define png_jmpbuf(png_ptr) \ 1.1093 + (*png_set_longjmp_fn((png_ptr), longjmp, (sizeof (jmp_buf)))) 1.1094 +#else 1.1095 +# define png_jmpbuf(png_ptr) \ 1.1096 + (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP) 1.1097 +#endif 1.1098 +/* This function should be used by libpng applications in place of 1.1099 + * longjmp(png_ptr->jmpbuf, val). If longjmp_fn() has been set, it 1.1100 + * will use it; otherwise it will call PNG_ABORT(). This function was 1.1101 + * added in libpng-1.5.0. 1.1102 + */ 1.1103 +PNG_EXPORTA(9, void, png_longjmp, (png_const_structrp png_ptr, int val), 1.1104 + PNG_NORETURN); 1.1105 + 1.1106 +#ifdef PNG_READ_SUPPORTED 1.1107 +/* Reset the compression stream */ 1.1108 +PNG_EXPORTA(10, int, png_reset_zstream, (png_structrp png_ptr), PNG_DEPRECATED); 1.1109 +#endif 1.1110 + 1.1111 +/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */ 1.1112 +#ifdef PNG_USER_MEM_SUPPORTED 1.1113 +PNG_EXPORTA(11, png_structp, png_create_read_struct_2, 1.1114 + (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, 1.1115 + png_error_ptr warn_fn, 1.1116 + png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn), 1.1117 + PNG_ALLOCATED); 1.1118 +PNG_EXPORTA(12, png_structp, png_create_write_struct_2, 1.1119 + (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, 1.1120 + png_error_ptr warn_fn, 1.1121 + png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn), 1.1122 + PNG_ALLOCATED); 1.1123 +#endif 1.1124 + 1.1125 +/* Write the PNG file signature. */ 1.1126 +PNG_EXPORT(13, void, png_write_sig, (png_structrp png_ptr)); 1.1127 + 1.1128 +/* Write a PNG chunk - size, type, (optional) data, CRC. */ 1.1129 +PNG_EXPORT(14, void, png_write_chunk, (png_structrp png_ptr, png_const_bytep 1.1130 + chunk_name, png_const_bytep data, png_size_t length)); 1.1131 + 1.1132 +/* Write the start of a PNG chunk - length and chunk name. */ 1.1133 +PNG_EXPORT(15, void, png_write_chunk_start, (png_structrp png_ptr, 1.1134 + png_const_bytep chunk_name, png_uint_32 length)); 1.1135 + 1.1136 +/* Write the data of a PNG chunk started with png_write_chunk_start(). */ 1.1137 +PNG_EXPORT(16, void, png_write_chunk_data, (png_structrp png_ptr, 1.1138 + png_const_bytep data, png_size_t length)); 1.1139 + 1.1140 +/* Finish a chunk started with png_write_chunk_start() (includes CRC). */ 1.1141 +PNG_EXPORT(17, void, png_write_chunk_end, (png_structrp png_ptr)); 1.1142 + 1.1143 +/* Allocate and initialize the info structure */ 1.1144 +PNG_EXPORTA(18, png_infop, png_create_info_struct, (png_const_structrp png_ptr), 1.1145 + PNG_ALLOCATED); 1.1146 + 1.1147 +/* DEPRECATED: this function allowed init structures to be created using the 1.1148 + * default allocation method (typically malloc). Use is deprecated in 1.6.0 and 1.1149 + * the API will be removed in the future. 1.1150 + */ 1.1151 +PNG_EXPORTA(19, void, png_info_init_3, (png_infopp info_ptr, 1.1152 + png_size_t png_info_struct_size), PNG_DEPRECATED); 1.1153 + 1.1154 +/* Writes all the PNG information before the image. */ 1.1155 +PNG_EXPORT(20, void, png_write_info_before_PLTE, 1.1156 + (png_structrp png_ptr, png_const_inforp info_ptr)); 1.1157 +PNG_EXPORT(21, void, png_write_info, 1.1158 + (png_structrp png_ptr, png_const_inforp info_ptr)); 1.1159 + 1.1160 +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED 1.1161 +/* Read the information before the actual image data. */ 1.1162 +PNG_EXPORT(22, void, png_read_info, 1.1163 + (png_structrp png_ptr, png_inforp info_ptr)); 1.1164 +#endif 1.1165 + 1.1166 +#ifdef PNG_TIME_RFC1123_SUPPORTED 1.1167 + /* Convert to a US string format: there is no localization support in this 1.1168 + * routine. The original implementation used a 29 character buffer in 1.1169 + * png_struct, this will be removed in future versions. 1.1170 + */ 1.1171 +#if PNG_LIBPNG_VER < 10700 1.1172 +/* To do: remove this from libpng17 (and from libpng17/png.c and pngstruct.h) */ 1.1173 +PNG_EXPORTA(23, png_const_charp, png_convert_to_rfc1123, (png_structrp png_ptr, 1.1174 + png_const_timep ptime),PNG_DEPRECATED); 1.1175 +#endif 1.1176 +PNG_EXPORT(241, int, png_convert_to_rfc1123_buffer, (char out[29], 1.1177 + png_const_timep ptime)); 1.1178 +#endif 1.1179 + 1.1180 +#ifdef PNG_CONVERT_tIME_SUPPORTED 1.1181 +/* Convert from a struct tm to png_time */ 1.1182 +PNG_EXPORT(24, void, png_convert_from_struct_tm, (png_timep ptime, 1.1183 + const struct tm * ttime)); 1.1184 + 1.1185 +/* Convert from time_t to png_time. Uses gmtime() */ 1.1186 +PNG_EXPORT(25, void, png_convert_from_time_t, (png_timep ptime, time_t ttime)); 1.1187 +#endif /* PNG_CONVERT_tIME_SUPPORTED */ 1.1188 + 1.1189 +#ifdef PNG_READ_EXPAND_SUPPORTED 1.1190 +/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */ 1.1191 +PNG_EXPORT(26, void, png_set_expand, (png_structrp png_ptr)); 1.1192 +PNG_EXPORT(27, void, png_set_expand_gray_1_2_4_to_8, (png_structrp png_ptr)); 1.1193 +PNG_EXPORT(28, void, png_set_palette_to_rgb, (png_structrp png_ptr)); 1.1194 +PNG_EXPORT(29, void, png_set_tRNS_to_alpha, (png_structrp png_ptr)); 1.1195 +#endif 1.1196 + 1.1197 +#ifdef PNG_READ_EXPAND_16_SUPPORTED 1.1198 +/* Expand to 16-bit channels, forces conversion of palette to RGB and expansion 1.1199 + * of a tRNS chunk if present. 1.1200 + */ 1.1201 +PNG_EXPORT(221, void, png_set_expand_16, (png_structrp png_ptr)); 1.1202 +#endif 1.1203 + 1.1204 +#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) 1.1205 +/* Use blue, green, red order for pixels. */ 1.1206 +PNG_EXPORT(30, void, png_set_bgr, (png_structrp png_ptr)); 1.1207 +#endif 1.1208 + 1.1209 +#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED 1.1210 +/* Expand the grayscale to 24-bit RGB if necessary. */ 1.1211 +PNG_EXPORT(31, void, png_set_gray_to_rgb, (png_structrp png_ptr)); 1.1212 +#endif 1.1213 + 1.1214 +#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED 1.1215 +/* Reduce RGB to grayscale. */ 1.1216 +#define PNG_ERROR_ACTION_NONE 1 1.1217 +#define PNG_ERROR_ACTION_WARN 2 1.1218 +#define PNG_ERROR_ACTION_ERROR 3 1.1219 +#define PNG_RGB_TO_GRAY_DEFAULT (-1)/*for red/green coefficients*/ 1.1220 + 1.1221 +PNG_FP_EXPORT(32, void, png_set_rgb_to_gray, (png_structrp png_ptr, 1.1222 + int error_action, double red, double green)) 1.1223 +PNG_FIXED_EXPORT(33, void, png_set_rgb_to_gray_fixed, (png_structrp png_ptr, 1.1224 + int error_action, png_fixed_point red, png_fixed_point green)) 1.1225 + 1.1226 +PNG_EXPORT(34, png_byte, png_get_rgb_to_gray_status, (png_const_structrp 1.1227 + png_ptr)); 1.1228 +#endif 1.1229 + 1.1230 +#ifdef PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED 1.1231 +PNG_EXPORT(35, void, png_build_grayscale_palette, (int bit_depth, 1.1232 + png_colorp palette)); 1.1233 +#endif 1.1234 + 1.1235 +#ifdef PNG_READ_ALPHA_MODE_SUPPORTED 1.1236 +/* How the alpha channel is interpreted - this affects how the color channels 1.1237 + * of a PNG file are returned to the calling application when an alpha channel, 1.1238 + * or a tRNS chunk in a palette file, is present. 1.1239 + * 1.1240 + * This has no effect on the way pixels are written into a PNG output 1.1241 + * datastream. The color samples in a PNG datastream are never premultiplied 1.1242 + * with the alpha samples. 1.1243 + * 1.1244 + * The default is to return data according to the PNG specification: the alpha 1.1245 + * channel is a linear measure of the contribution of the pixel to the 1.1246 + * corresponding composited pixel, and the color channels are unassociated 1.1247 + * (not premultiplied). The gamma encoded color channels must be scaled 1.1248 + * according to the contribution and to do this it is necessary to undo 1.1249 + * the encoding, scale the color values, perform the composition and reencode 1.1250 + * the values. This is the 'PNG' mode. 1.1251 + * 1.1252 + * The alternative is to 'associate' the alpha with the color information by 1.1253 + * storing color channel values that have been scaled by the alpha. 1.1254 + * image. These are the 'STANDARD', 'ASSOCIATED' or 'PREMULTIPLIED' modes 1.1255 + * (the latter being the two common names for associated alpha color channels). 1.1256 + * 1.1257 + * For the 'OPTIMIZED' mode, a pixel is treated as opaque only if the alpha 1.1258 + * value is equal to the maximum value. 1.1259 + * 1.1260 + * The final choice is to gamma encode the alpha channel as well. This is 1.1261 + * broken because, in practice, no implementation that uses this choice 1.1262 + * correctly undoes the encoding before handling alpha composition. Use this 1.1263 + * choice only if other serious errors in the software or hardware you use 1.1264 + * mandate it; the typical serious error is for dark halos to appear around 1.1265 + * opaque areas of the composited PNG image because of arithmetic overflow. 1.1266 + * 1.1267 + * The API function png_set_alpha_mode specifies which of these choices to use 1.1268 + * with an enumerated 'mode' value and the gamma of the required output: 1.1269 + */ 1.1270 +#define PNG_ALPHA_PNG 0 /* according to the PNG standard */ 1.1271 +#define PNG_ALPHA_STANDARD 1 /* according to Porter/Duff */ 1.1272 +#define PNG_ALPHA_ASSOCIATED 1 /* as above; this is the normal practice */ 1.1273 +#define PNG_ALPHA_PREMULTIPLIED 1 /* as above */ 1.1274 +#define PNG_ALPHA_OPTIMIZED 2 /* 'PNG' for opaque pixels, else 'STANDARD' */ 1.1275 +#define PNG_ALPHA_BROKEN 3 /* the alpha channel is gamma encoded */ 1.1276 + 1.1277 +PNG_FP_EXPORT(227, void, png_set_alpha_mode, (png_structrp png_ptr, int mode, 1.1278 + double output_gamma)) 1.1279 +PNG_FIXED_EXPORT(228, void, png_set_alpha_mode_fixed, (png_structrp png_ptr, 1.1280 + int mode, png_fixed_point output_gamma)) 1.1281 +#endif 1.1282 + 1.1283 +#if defined(PNG_GAMMA_SUPPORTED) || defined(PNG_READ_ALPHA_MODE_SUPPORTED) 1.1284 +/* The output_gamma value is a screen gamma in libpng terminology: it expresses 1.1285 + * how to decode the output values, not how they are encoded. 1.1286 + */ 1.1287 +#define PNG_DEFAULT_sRGB -1 /* sRGB gamma and color space */ 1.1288 +#define PNG_GAMMA_MAC_18 -2 /* Old Mac '1.8' gamma and color space */ 1.1289 +#define PNG_GAMMA_sRGB 220000 /* Television standards--matches sRGB gamma */ 1.1290 +#define PNG_GAMMA_LINEAR PNG_FP_1 /* Linear */ 1.1291 +#endif 1.1292 + 1.1293 +/* The following are examples of calls to png_set_alpha_mode to achieve the 1.1294 + * required overall gamma correction and, where necessary, alpha 1.1295 + * premultiplication. 1.1296 + * 1.1297 + * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB); 1.1298 + * This is the default libpng handling of the alpha channel - it is not 1.1299 + * pre-multiplied into the color components. In addition the call states 1.1300 + * that the output is for a sRGB system and causes all PNG files without gAMA 1.1301 + * chunks to be assumed to be encoded using sRGB. 1.1302 + * 1.1303 + * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); 1.1304 + * In this case the output is assumed to be something like an sRGB conformant 1.1305 + * display preceeded by a power-law lookup table of power 1.45. This is how 1.1306 + * early Mac systems behaved. 1.1307 + * 1.1308 + * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR); 1.1309 + * This is the classic Jim Blinn approach and will work in academic 1.1310 + * environments where everything is done by the book. It has the shortcoming 1.1311 + * of assuming that input PNG data with no gamma information is linear - this 1.1312 + * is unlikely to be correct unless the PNG files where generated locally. 1.1313 + * Most of the time the output precision will be so low as to show 1.1314 + * significant banding in dark areas of the image. 1.1315 + * 1.1316 + * png_set_expand_16(pp); 1.1317 + * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_DEFAULT_sRGB); 1.1318 + * This is a somewhat more realistic Jim Blinn inspired approach. PNG files 1.1319 + * are assumed to have the sRGB encoding if not marked with a gamma value and 1.1320 + * the output is always 16 bits per component. This permits accurate scaling 1.1321 + * and processing of the data. If you know that your input PNG files were 1.1322 + * generated locally you might need to replace PNG_DEFAULT_sRGB with the 1.1323 + * correct value for your system. 1.1324 + * 1.1325 + * png_set_alpha_mode(pp, PNG_ALPHA_OPTIMIZED, PNG_DEFAULT_sRGB); 1.1326 + * If you just need to composite the PNG image onto an existing background 1.1327 + * and if you control the code that does this you can use the optimization 1.1328 + * setting. In this case you just copy completely opaque pixels to the 1.1329 + * output. For pixels that are not completely transparent (you just skip 1.1330 + * those) you do the composition math using png_composite or png_composite_16 1.1331 + * below then encode the resultant 8-bit or 16-bit values to match the output 1.1332 + * encoding. 1.1333 + * 1.1334 + * Other cases 1.1335 + * If neither the PNG nor the standard linear encoding work for you because 1.1336 + * of the software or hardware you use then you have a big problem. The PNG 1.1337 + * case will probably result in halos around the image. The linear encoding 1.1338 + * will probably result in a washed out, too bright, image (it's actually too 1.1339 + * contrasty.) Try the ALPHA_OPTIMIZED mode above - this will probably 1.1340 + * substantially reduce the halos. Alternatively try: 1.1341 + * 1.1342 + * png_set_alpha_mode(pp, PNG_ALPHA_BROKEN, PNG_DEFAULT_sRGB); 1.1343 + * This option will also reduce the halos, but there will be slight dark 1.1344 + * halos round the opaque parts of the image where the background is light. 1.1345 + * In the OPTIMIZED mode the halos will be light halos where the background 1.1346 + * is dark. Take your pick - the halos are unavoidable unless you can get 1.1347 + * your hardware/software fixed! (The OPTIMIZED approach is slightly 1.1348 + * faster.) 1.1349 + * 1.1350 + * When the default gamma of PNG files doesn't match the output gamma. 1.1351 + * If you have PNG files with no gamma information png_set_alpha_mode allows 1.1352 + * you to provide a default gamma, but it also sets the ouput gamma to the 1.1353 + * matching value. If you know your PNG files have a gamma that doesn't 1.1354 + * match the output you can take advantage of the fact that 1.1355 + * png_set_alpha_mode always sets the output gamma but only sets the PNG 1.1356 + * default if it is not already set: 1.1357 + * 1.1358 + * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB); 1.1359 + * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); 1.1360 + * The first call sets both the default and the output gamma values, the 1.1361 + * second call overrides the output gamma without changing the default. This 1.1362 + * is easier than achieving the same effect with png_set_gamma. You must use 1.1363 + * PNG_ALPHA_PNG for the first call - internal checking in png_set_alpha will 1.1364 + * fire if more than one call to png_set_alpha_mode and png_set_background is 1.1365 + * made in the same read operation, however multiple calls with PNG_ALPHA_PNG 1.1366 + * are ignored. 1.1367 + */ 1.1368 + 1.1369 +#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED 1.1370 +PNG_EXPORT(36, void, png_set_strip_alpha, (png_structrp png_ptr)); 1.1371 +#endif 1.1372 + 1.1373 +#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ 1.1374 + defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) 1.1375 +PNG_EXPORT(37, void, png_set_swap_alpha, (png_structrp png_ptr)); 1.1376 +#endif 1.1377 + 1.1378 +#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ 1.1379 + defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) 1.1380 +PNG_EXPORT(38, void, png_set_invert_alpha, (png_structrp png_ptr)); 1.1381 +#endif 1.1382 + 1.1383 +#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) 1.1384 +/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */ 1.1385 +PNG_EXPORT(39, void, png_set_filler, (png_structrp png_ptr, png_uint_32 filler, 1.1386 + int flags)); 1.1387 +/* The values of the PNG_FILLER_ defines should NOT be changed */ 1.1388 +# define PNG_FILLER_BEFORE 0 1.1389 +# define PNG_FILLER_AFTER 1 1.1390 +/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */ 1.1391 +PNG_EXPORT(40, void, png_set_add_alpha, (png_structrp png_ptr, 1.1392 + png_uint_32 filler, int flags)); 1.1393 +#endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */ 1.1394 + 1.1395 +#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) 1.1396 +/* Swap bytes in 16-bit depth files. */ 1.1397 +PNG_EXPORT(41, void, png_set_swap, (png_structrp png_ptr)); 1.1398 +#endif 1.1399 + 1.1400 +#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) 1.1401 +/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */ 1.1402 +PNG_EXPORT(42, void, png_set_packing, (png_structrp png_ptr)); 1.1403 +#endif 1.1404 + 1.1405 +#if defined(PNG_READ_PACKSWAP_SUPPORTED) || \ 1.1406 + defined(PNG_WRITE_PACKSWAP_SUPPORTED) 1.1407 +/* Swap packing order of pixels in bytes. */ 1.1408 +PNG_EXPORT(43, void, png_set_packswap, (png_structrp png_ptr)); 1.1409 +#endif 1.1410 + 1.1411 +#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) 1.1412 +/* Converts files to legal bit depths. */ 1.1413 +PNG_EXPORT(44, void, png_set_shift, (png_structrp png_ptr, png_const_color_8p 1.1414 + true_bits)); 1.1415 +#endif 1.1416 + 1.1417 +#if defined(PNG_READ_INTERLACING_SUPPORTED) || \ 1.1418 + defined(PNG_WRITE_INTERLACING_SUPPORTED) 1.1419 +/* Have the code handle the interlacing. Returns the number of passes. 1.1420 + * MUST be called before png_read_update_info or png_start_read_image, 1.1421 + * otherwise it will not have the desired effect. Note that it is still 1.1422 + * necessary to call png_read_row or png_read_rows png_get_image_height 1.1423 + * times for each pass. 1.1424 +*/ 1.1425 +PNG_EXPORT(45, int, png_set_interlace_handling, (png_structrp png_ptr)); 1.1426 +#endif 1.1427 + 1.1428 +#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) 1.1429 +/* Invert monochrome files */ 1.1430 +PNG_EXPORT(46, void, png_set_invert_mono, (png_structrp png_ptr)); 1.1431 +#endif 1.1432 + 1.1433 +#ifdef PNG_READ_BACKGROUND_SUPPORTED 1.1434 +/* Handle alpha and tRNS by replacing with a background color. Prior to 1.1435 + * libpng-1.5.4 this API must not be called before the PNG file header has been 1.1436 + * read. Doing so will result in unexpected behavior and possible warnings or 1.1437 + * errors if the PNG file contains a bKGD chunk. 1.1438 + */ 1.1439 +PNG_FP_EXPORT(47, void, png_set_background, (png_structrp png_ptr, 1.1440 + png_const_color_16p background_color, int background_gamma_code, 1.1441 + int need_expand, double background_gamma)) 1.1442 +PNG_FIXED_EXPORT(215, void, png_set_background_fixed, (png_structrp png_ptr, 1.1443 + png_const_color_16p background_color, int background_gamma_code, 1.1444 + int need_expand, png_fixed_point background_gamma)) 1.1445 +#endif 1.1446 +#ifdef PNG_READ_BACKGROUND_SUPPORTED 1.1447 +# define PNG_BACKGROUND_GAMMA_UNKNOWN 0 1.1448 +# define PNG_BACKGROUND_GAMMA_SCREEN 1 1.1449 +# define PNG_BACKGROUND_GAMMA_FILE 2 1.1450 +# define PNG_BACKGROUND_GAMMA_UNIQUE 3 1.1451 +#endif 1.1452 + 1.1453 +#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED 1.1454 +/* Scale a 16-bit depth file down to 8-bit, accurately. */ 1.1455 +PNG_EXPORT(229, void, png_set_scale_16, (png_structrp png_ptr)); 1.1456 +#endif 1.1457 + 1.1458 +#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED 1.1459 +#define PNG_READ_16_TO_8 SUPPORTED /* Name prior to 1.5.4 */ 1.1460 +/* Strip the second byte of information from a 16-bit depth file. */ 1.1461 +PNG_EXPORT(48, void, png_set_strip_16, (png_structrp png_ptr)); 1.1462 +#endif 1.1463 + 1.1464 +#ifdef PNG_READ_QUANTIZE_SUPPORTED 1.1465 +/* Turn on quantizing, and reduce the palette to the number of colors 1.1466 + * available. 1.1467 + */ 1.1468 +PNG_EXPORT(49, void, png_set_quantize, (png_structrp png_ptr, 1.1469 + png_colorp palette, int num_palette, int maximum_colors, 1.1470 + png_const_uint_16p histogram, int full_quantize)); 1.1471 +#endif 1.1472 + 1.1473 +#ifdef PNG_READ_GAMMA_SUPPORTED 1.1474 +/* The threshold on gamma processing is configurable but hard-wired into the 1.1475 + * library. The following is the floating point variant. 1.1476 + */ 1.1477 +#define PNG_GAMMA_THRESHOLD (PNG_GAMMA_THRESHOLD_FIXED*.00001) 1.1478 + 1.1479 +/* Handle gamma correction. Screen_gamma=(display_exponent). 1.1480 + * NOTE: this API simply sets the screen and file gamma values. It will 1.1481 + * therefore override the value for gamma in a PNG file if it is called after 1.1482 + * the file header has been read - use with care - call before reading the PNG 1.1483 + * file for best results! 1.1484 + * 1.1485 + * These routines accept the same gamma values as png_set_alpha_mode (described 1.1486 + * above). The PNG_GAMMA_ defines and PNG_DEFAULT_sRGB can be passed to either 1.1487 + * API (floating point or fixed.) Notice, however, that the 'file_gamma' value 1.1488 + * is the inverse of a 'screen gamma' value. 1.1489 + */ 1.1490 +PNG_FP_EXPORT(50, void, png_set_gamma, (png_structrp png_ptr, 1.1491 + double screen_gamma, double override_file_gamma)) 1.1492 +PNG_FIXED_EXPORT(208, void, png_set_gamma_fixed, (png_structrp png_ptr, 1.1493 + png_fixed_point screen_gamma, png_fixed_point override_file_gamma)) 1.1494 +#endif 1.1495 + 1.1496 +#ifdef PNG_WRITE_FLUSH_SUPPORTED 1.1497 +/* Set how many lines between output flushes - 0 for no flushing */ 1.1498 +PNG_EXPORT(51, void, png_set_flush, (png_structrp png_ptr, int nrows)); 1.1499 +/* Flush the current PNG output buffer */ 1.1500 +PNG_EXPORT(52, void, png_write_flush, (png_structrp png_ptr)); 1.1501 +#endif 1.1502 + 1.1503 +/* Optional update palette with requested transformations */ 1.1504 +PNG_EXPORT(53, void, png_start_read_image, (png_structrp png_ptr)); 1.1505 + 1.1506 +/* Optional call to update the users info structure */ 1.1507 +PNG_EXPORT(54, void, png_read_update_info, (png_structrp png_ptr, 1.1508 + png_inforp info_ptr)); 1.1509 + 1.1510 +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED 1.1511 +/* Read one or more rows of image data. */ 1.1512 +PNG_EXPORT(55, void, png_read_rows, (png_structrp png_ptr, png_bytepp row, 1.1513 + png_bytepp display_row, png_uint_32 num_rows)); 1.1514 +#endif 1.1515 + 1.1516 +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED 1.1517 +/* Read a row of data. */ 1.1518 +PNG_EXPORT(56, void, png_read_row, (png_structrp png_ptr, png_bytep row, 1.1519 + png_bytep display_row)); 1.1520 +#endif 1.1521 + 1.1522 +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED 1.1523 +/* Read the whole image into memory at once. */ 1.1524 +PNG_EXPORT(57, void, png_read_image, (png_structrp png_ptr, png_bytepp image)); 1.1525 +#endif 1.1526 + 1.1527 +/* Write a row of image data */ 1.1528 +PNG_EXPORT(58, void, png_write_row, (png_structrp png_ptr, 1.1529 + png_const_bytep row)); 1.1530 + 1.1531 +/* Write a few rows of image data: (*row) is not written; however, the type 1.1532 + * is declared as writeable to maintain compatibility with previous versions 1.1533 + * of libpng and to allow the 'display_row' array from read_rows to be passed 1.1534 + * unchanged to write_rows. 1.1535 + */ 1.1536 +PNG_EXPORT(59, void, png_write_rows, (png_structrp png_ptr, png_bytepp row, 1.1537 + png_uint_32 num_rows)); 1.1538 + 1.1539 +/* Write the image data */ 1.1540 +PNG_EXPORT(60, void, png_write_image, (png_structrp png_ptr, png_bytepp image)); 1.1541 + 1.1542 +/* Write the end of the PNG file. */ 1.1543 +PNG_EXPORT(61, void, png_write_end, (png_structrp png_ptr, 1.1544 + png_inforp info_ptr)); 1.1545 + 1.1546 +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED 1.1547 +/* Read the end of the PNG file. */ 1.1548 +PNG_EXPORT(62, void, png_read_end, (png_structrp png_ptr, png_inforp info_ptr)); 1.1549 +#endif 1.1550 + 1.1551 +/* Free any memory associated with the png_info_struct */ 1.1552 +PNG_EXPORT(63, void, png_destroy_info_struct, (png_const_structrp png_ptr, 1.1553 + png_infopp info_ptr_ptr)); 1.1554 + 1.1555 +/* Free any memory associated with the png_struct and the png_info_structs */ 1.1556 +PNG_EXPORT(64, void, png_destroy_read_struct, (png_structpp png_ptr_ptr, 1.1557 + png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr)); 1.1558 + 1.1559 +/* Free any memory associated with the png_struct and the png_info_structs */ 1.1560 +PNG_EXPORT(65, void, png_destroy_write_struct, (png_structpp png_ptr_ptr, 1.1561 + png_infopp info_ptr_ptr)); 1.1562 + 1.1563 +/* Set the libpng method of handling chunk CRC errors */ 1.1564 +PNG_EXPORT(66, void, png_set_crc_action, (png_structrp png_ptr, int crit_action, 1.1565 + int ancil_action)); 1.1566 + 1.1567 +/* Values for png_set_crc_action() say how to handle CRC errors in 1.1568 + * ancillary and critical chunks, and whether to use the data contained 1.1569 + * therein. Note that it is impossible to "discard" data in a critical 1.1570 + * chunk. For versions prior to 0.90, the action was always error/quit, 1.1571 + * whereas in version 0.90 and later, the action for CRC errors in ancillary 1.1572 + * chunks is warn/discard. These values should NOT be changed. 1.1573 + * 1.1574 + * value action:critical action:ancillary 1.1575 + */ 1.1576 +#define PNG_CRC_DEFAULT 0 /* error/quit warn/discard data */ 1.1577 +#define PNG_CRC_ERROR_QUIT 1 /* error/quit error/quit */ 1.1578 +#define PNG_CRC_WARN_DISCARD 2 /* (INVALID) warn/discard data */ 1.1579 +#define PNG_CRC_WARN_USE 3 /* warn/use data warn/use data */ 1.1580 +#define PNG_CRC_QUIET_USE 4 /* quiet/use data quiet/use data */ 1.1581 +#define PNG_CRC_NO_CHANGE 5 /* use current value use current value */ 1.1582 + 1.1583 +/* These functions give the user control over the scan-line filtering in 1.1584 + * libpng and the compression methods used by zlib. These functions are 1.1585 + * mainly useful for testing, as the defaults should work with most users. 1.1586 + * Those users who are tight on memory or want faster performance at the 1.1587 + * expense of compression can modify them. See the compression library 1.1588 + * header file (zlib.h) for an explination of the compression functions. 1.1589 + */ 1.1590 + 1.1591 +/* Set the filtering method(s) used by libpng. Currently, the only valid 1.1592 + * value for "method" is 0. 1.1593 + */ 1.1594 +PNG_EXPORT(67, void, png_set_filter, (png_structrp png_ptr, int method, 1.1595 + int filters)); 1.1596 + 1.1597 +/* Flags for png_set_filter() to say which filters to use. The flags 1.1598 + * are chosen so that they don't conflict with real filter types 1.1599 + * below, in case they are supplied instead of the #defined constants. 1.1600 + * These values should NOT be changed. 1.1601 + */ 1.1602 +#define PNG_NO_FILTERS 0x00 1.1603 +#define PNG_FILTER_NONE 0x08 1.1604 +#define PNG_FILTER_SUB 0x10 1.1605 +#define PNG_FILTER_UP 0x20 1.1606 +#define PNG_FILTER_AVG 0x40 1.1607 +#define PNG_FILTER_PAETH 0x80 1.1608 +#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \ 1.1609 + PNG_FILTER_AVG | PNG_FILTER_PAETH) 1.1610 + 1.1611 +/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now. 1.1612 + * These defines should NOT be changed. 1.1613 + */ 1.1614 +#define PNG_FILTER_VALUE_NONE 0 1.1615 +#define PNG_FILTER_VALUE_SUB 1 1.1616 +#define PNG_FILTER_VALUE_UP 2 1.1617 +#define PNG_FILTER_VALUE_AVG 3 1.1618 +#define PNG_FILTER_VALUE_PAETH 4 1.1619 +#define PNG_FILTER_VALUE_LAST 5 1.1620 + 1.1621 +#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* EXPERIMENTAL */ 1.1622 +/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_ 1.1623 + * defines, either the default (minimum-sum-of-absolute-differences), or 1.1624 + * the experimental method (weighted-minimum-sum-of-absolute-differences). 1.1625 + * 1.1626 + * Weights are factors >= 1.0, indicating how important it is to keep the 1.1627 + * filter type consistent between rows. Larger numbers mean the current 1.1628 + * filter is that many times as likely to be the same as the "num_weights" 1.1629 + * previous filters. This is cumulative for each previous row with a weight. 1.1630 + * There needs to be "num_weights" values in "filter_weights", or it can be 1.1631 + * NULL if the weights aren't being specified. Weights have no influence on 1.1632 + * the selection of the first row filter. Well chosen weights can (in theory) 1.1633 + * improve the compression for a given image. 1.1634 + * 1.1635 + * Costs are factors >= 1.0 indicating the relative decoding costs of a 1.1636 + * filter type. Higher costs indicate more decoding expense, and are 1.1637 + * therefore less likely to be selected over a filter with lower computational 1.1638 + * costs. There needs to be a value in "filter_costs" for each valid filter 1.1639 + * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't 1.1640 + * setting the costs. Costs try to improve the speed of decompression without 1.1641 + * unduly increasing the compressed image size. 1.1642 + * 1.1643 + * A negative weight or cost indicates the default value is to be used, and 1.1644 + * values in the range [0.0, 1.0) indicate the value is to remain unchanged. 1.1645 + * The default values for both weights and costs are currently 1.0, but may 1.1646 + * change if good general weighting/cost heuristics can be found. If both 1.1647 + * the weights and costs are set to 1.0, this degenerates the WEIGHTED method 1.1648 + * to the UNWEIGHTED method, but with added encoding time/computation. 1.1649 + */ 1.1650 +PNG_FP_EXPORT(68, void, png_set_filter_heuristics, (png_structrp png_ptr, 1.1651 + int heuristic_method, int num_weights, png_const_doublep filter_weights, 1.1652 + png_const_doublep filter_costs)) 1.1653 +PNG_FIXED_EXPORT(209, void, png_set_filter_heuristics_fixed, 1.1654 + (png_structrp png_ptr, int heuristic_method, int num_weights, 1.1655 + png_const_fixed_point_p filter_weights, 1.1656 + png_const_fixed_point_p filter_costs)) 1.1657 +#endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */ 1.1658 + 1.1659 +/* Heuristic used for row filter selection. These defines should NOT be 1.1660 + * changed. 1.1661 + */ 1.1662 +#define PNG_FILTER_HEURISTIC_DEFAULT 0 /* Currently "UNWEIGHTED" */ 1.1663 +#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 /* Used by libpng < 0.95 */ 1.1664 +#define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */ 1.1665 +#define PNG_FILTER_HEURISTIC_LAST 3 /* Not a valid value */ 1.1666 + 1.1667 +#ifdef PNG_WRITE_SUPPORTED 1.1668 +/* Set the library compression level. Currently, valid values range from 1.1669 + * 0 - 9, corresponding directly to the zlib compression levels 0 - 9 1.1670 + * (0 - no compression, 9 - "maximal" compression). Note that tests have 1.1671 + * shown that zlib compression levels 3-6 usually perform as well as level 9 1.1672 + * for PNG images, and do considerably fewer caclulations. In the future, 1.1673 + * these values may not correspond directly to the zlib compression levels. 1.1674 + */ 1.1675 +PNG_EXPORT(69, void, png_set_compression_level, (png_structrp png_ptr, 1.1676 + int level)); 1.1677 + 1.1678 +PNG_EXPORT(70, void, png_set_compression_mem_level, (png_structrp png_ptr, 1.1679 + int mem_level)); 1.1680 + 1.1681 +PNG_EXPORT(71, void, png_set_compression_strategy, (png_structrp png_ptr, 1.1682 + int strategy)); 1.1683 + 1.1684 +/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a 1.1685 + * smaller value of window_bits if it can do so safely. 1.1686 + */ 1.1687 +PNG_EXPORT(72, void, png_set_compression_window_bits, (png_structrp png_ptr, 1.1688 + int window_bits)); 1.1689 + 1.1690 +PNG_EXPORT(73, void, png_set_compression_method, (png_structrp png_ptr, 1.1691 + int method)); 1.1692 +#endif 1.1693 + 1.1694 +#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED 1.1695 +/* Also set zlib parameters for compressing non-IDAT chunks */ 1.1696 +PNG_EXPORT(222, void, png_set_text_compression_level, (png_structrp png_ptr, 1.1697 + int level)); 1.1698 + 1.1699 +PNG_EXPORT(223, void, png_set_text_compression_mem_level, (png_structrp png_ptr, 1.1700 + int mem_level)); 1.1701 + 1.1702 +PNG_EXPORT(224, void, png_set_text_compression_strategy, (png_structrp png_ptr, 1.1703 + int strategy)); 1.1704 + 1.1705 +/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a 1.1706 + * smaller value of window_bits if it can do so safely. 1.1707 + */ 1.1708 +PNG_EXPORT(225, void, png_set_text_compression_window_bits, 1.1709 + (png_structrp png_ptr, int window_bits)); 1.1710 + 1.1711 +PNG_EXPORT(226, void, png_set_text_compression_method, (png_structrp png_ptr, 1.1712 + int method)); 1.1713 +#endif /* PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED */ 1.1714 + 1.1715 +/* These next functions are called for input/output, memory, and error 1.1716 + * handling. They are in the file pngrio.c, pngwio.c, and pngerror.c, 1.1717 + * and call standard C I/O routines such as fread(), fwrite(), and 1.1718 + * fprintf(). These functions can be made to use other I/O routines 1.1719 + * at run time for those applications that need to handle I/O in a 1.1720 + * different manner by calling png_set_???_fn(). See libpng-manual.txt for 1.1721 + * more information. 1.1722 + */ 1.1723 + 1.1724 +#ifdef PNG_STDIO_SUPPORTED 1.1725 +/* Initialize the input/output for the PNG file to the default functions. */ 1.1726 +PNG_EXPORT(74, void, png_init_io, (png_structrp png_ptr, png_FILE_p fp)); 1.1727 +#endif 1.1728 + 1.1729 +/* Replace the (error and abort), and warning functions with user 1.1730 + * supplied functions. If no messages are to be printed you must still 1.1731 + * write and use replacement functions. The replacement error_fn should 1.1732 + * still do a longjmp to the last setjmp location if you are using this 1.1733 + * method of error handling. If error_fn or warning_fn is NULL, the 1.1734 + * default function will be used. 1.1735 + */ 1.1736 + 1.1737 +PNG_EXPORT(75, void, png_set_error_fn, (png_structrp png_ptr, 1.1738 + png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn)); 1.1739 + 1.1740 +/* Return the user pointer associated with the error functions */ 1.1741 +PNG_EXPORT(76, png_voidp, png_get_error_ptr, (png_const_structrp png_ptr)); 1.1742 + 1.1743 +/* Replace the default data output functions with a user supplied one(s). 1.1744 + * If buffered output is not used, then output_flush_fn can be set to NULL. 1.1745 + * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time 1.1746 + * output_flush_fn will be ignored (and thus can be NULL). 1.1747 + * It is probably a mistake to use NULL for output_flush_fn if 1.1748 + * write_data_fn is not also NULL unless you have built libpng with 1.1749 + * PNG_WRITE_FLUSH_SUPPORTED undefined, because in this case libpng's 1.1750 + * default flush function, which uses the standard *FILE structure, will 1.1751 + * be used. 1.1752 + */ 1.1753 +PNG_EXPORT(77, void, png_set_write_fn, (png_structrp png_ptr, png_voidp io_ptr, 1.1754 + png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)); 1.1755 + 1.1756 +/* Replace the default data input function with a user supplied one. */ 1.1757 +PNG_EXPORT(78, void, png_set_read_fn, (png_structrp png_ptr, png_voidp io_ptr, 1.1758 + png_rw_ptr read_data_fn)); 1.1759 + 1.1760 +/* Return the user pointer associated with the I/O functions */ 1.1761 +PNG_EXPORT(79, png_voidp, png_get_io_ptr, (png_const_structrp png_ptr)); 1.1762 + 1.1763 +PNG_EXPORT(80, void, png_set_read_status_fn, (png_structrp png_ptr, 1.1764 + png_read_status_ptr read_row_fn)); 1.1765 + 1.1766 +PNG_EXPORT(81, void, png_set_write_status_fn, (png_structrp png_ptr, 1.1767 + png_write_status_ptr write_row_fn)); 1.1768 + 1.1769 +#ifdef PNG_USER_MEM_SUPPORTED 1.1770 +/* Replace the default memory allocation functions with user supplied one(s). */ 1.1771 +PNG_EXPORT(82, void, png_set_mem_fn, (png_structrp png_ptr, png_voidp mem_ptr, 1.1772 + png_malloc_ptr malloc_fn, png_free_ptr free_fn)); 1.1773 +/* Return the user pointer associated with the memory functions */ 1.1774 +PNG_EXPORT(83, png_voidp, png_get_mem_ptr, (png_const_structrp png_ptr)); 1.1775 +#endif 1.1776 + 1.1777 +#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED 1.1778 +PNG_EXPORT(84, void, png_set_read_user_transform_fn, (png_structrp png_ptr, 1.1779 + png_user_transform_ptr read_user_transform_fn)); 1.1780 +#endif 1.1781 + 1.1782 +#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED 1.1783 +PNG_EXPORT(85, void, png_set_write_user_transform_fn, (png_structrp png_ptr, 1.1784 + png_user_transform_ptr write_user_transform_fn)); 1.1785 +#endif 1.1786 + 1.1787 +#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED 1.1788 +PNG_EXPORT(86, void, png_set_user_transform_info, (png_structrp png_ptr, 1.1789 + png_voidp user_transform_ptr, int user_transform_depth, 1.1790 + int user_transform_channels)); 1.1791 +/* Return the user pointer associated with the user transform functions */ 1.1792 +PNG_EXPORT(87, png_voidp, png_get_user_transform_ptr, 1.1793 + (png_const_structrp png_ptr)); 1.1794 +#endif 1.1795 + 1.1796 +#ifdef PNG_USER_TRANSFORM_INFO_SUPPORTED 1.1797 +/* Return information about the row currently being processed. Note that these 1.1798 + * APIs do not fail but will return unexpected results if called outside a user 1.1799 + * transform callback. Also note that when transforming an interlaced image the 1.1800 + * row number is the row number within the sub-image of the interlace pass, so 1.1801 + * the value will increase to the height of the sub-image (not the full image) 1.1802 + * then reset to 0 for the next pass. 1.1803 + * 1.1804 + * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to 1.1805 + * find the output pixel (x,y) given an interlaced sub-image pixel 1.1806 + * (row,col,pass). (See below for these macros.) 1.1807 + */ 1.1808 +PNG_EXPORT(217, png_uint_32, png_get_current_row_number, (png_const_structrp)); 1.1809 +PNG_EXPORT(218, png_byte, png_get_current_pass_number, (png_const_structrp)); 1.1810 +#endif 1.1811 + 1.1812 +#ifdef PNG_READ_USER_CHUNKS_SUPPORTED 1.1813 +/* This callback is called only for *unknown* chunks. If 1.1814 + * PNG_HANDLE_AS_UNKNOWN_SUPPORTED is set then it is possible to set known 1.1815 + * chunks to be treated as unknown, however in this case the callback must do 1.1816 + * any processing required by the chunk (e.g. by calling the appropriate 1.1817 + * png_set_ APIs.) 1.1818 + * 1.1819 + * There is no write support - on write, by default, all the chunks in the 1.1820 + * 'unknown' list are written in the specified position. 1.1821 + * 1.1822 + * The integer return from the callback function is interpreted thus: 1.1823 + * 1.1824 + * negative: An error occured, png_chunk_error will be called. 1.1825 + * zero: The chunk was not handled, the chunk will be saved. A critical 1.1826 + * chunk will cause an error at this point unless it is to be saved. 1.1827 + * positive: The chunk was handled, libpng will ignore/discard it. 1.1828 + * 1.1829 + * See "INTERACTION WTIH USER CHUNK CALLBACKS" below for important notes about 1.1830 + * how this behavior will change in libpng 1.7 1.1831 + */ 1.1832 +PNG_EXPORT(88, void, png_set_read_user_chunk_fn, (png_structrp png_ptr, 1.1833 + png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); 1.1834 +#endif 1.1835 + 1.1836 +#ifdef PNG_USER_CHUNKS_SUPPORTED 1.1837 +PNG_EXPORT(89, png_voidp, png_get_user_chunk_ptr, (png_const_structrp png_ptr)); 1.1838 +#endif 1.1839 + 1.1840 +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED 1.1841 +/* Sets the function callbacks for the push reader, and a pointer to a 1.1842 + * user-defined structure available to the callback functions. 1.1843 + */ 1.1844 +PNG_EXPORT(90, void, png_set_progressive_read_fn, (png_structrp png_ptr, 1.1845 + png_voidp progressive_ptr, png_progressive_info_ptr info_fn, 1.1846 + png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn)); 1.1847 + 1.1848 +/* Returns the user pointer associated with the push read functions */ 1.1849 +PNG_EXPORT(91, png_voidp, png_get_progressive_ptr, 1.1850 + (png_const_structrp png_ptr)); 1.1851 + 1.1852 +/* Function to be called when data becomes available */ 1.1853 +PNG_EXPORT(92, void, png_process_data, (png_structrp png_ptr, 1.1854 + png_inforp info_ptr, png_bytep buffer, png_size_t buffer_size)); 1.1855 + 1.1856 +/* A function which may be called *only* within png_process_data to stop the 1.1857 + * processing of any more data. The function returns the number of bytes 1.1858 + * remaining, excluding any that libpng has cached internally. A subsequent 1.1859 + * call to png_process_data must supply these bytes again. If the argument 1.1860 + * 'save' is set to true the routine will first save all the pending data and 1.1861 + * will always return 0. 1.1862 + */ 1.1863 +PNG_EXPORT(219, png_size_t, png_process_data_pause, (png_structrp, int save)); 1.1864 + 1.1865 +/* A function which may be called *only* outside (after) a call to 1.1866 + * png_process_data. It returns the number of bytes of data to skip in the 1.1867 + * input. Normally it will return 0, but if it returns a non-zero value the 1.1868 + * application must skip than number of bytes of input data and pass the 1.1869 + * following data to the next call to png_process_data. 1.1870 + */ 1.1871 +PNG_EXPORT(220, png_uint_32, png_process_data_skip, (png_structrp)); 1.1872 + 1.1873 +#ifdef PNG_READ_INTERLACING_SUPPORTED 1.1874 +/* Function that combines rows. 'new_row' is a flag that should come from 1.1875 + * the callback and be non-NULL if anything needs to be done; the library 1.1876 + * stores its own version of the new data internally and ignores the passed 1.1877 + * in value. 1.1878 + */ 1.1879 +PNG_EXPORT(93, void, png_progressive_combine_row, (png_const_structrp png_ptr, 1.1880 + png_bytep old_row, png_const_bytep new_row)); 1.1881 +#endif /* PNG_READ_INTERLACING_SUPPORTED */ 1.1882 +#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ 1.1883 + 1.1884 +PNG_EXPORTA(94, png_voidp, png_malloc, (png_const_structrp png_ptr, 1.1885 + png_alloc_size_t size), PNG_ALLOCATED); 1.1886 +/* Added at libpng version 1.4.0 */ 1.1887 +PNG_EXPORTA(95, png_voidp, png_calloc, (png_const_structrp png_ptr, 1.1888 + png_alloc_size_t size), PNG_ALLOCATED); 1.1889 + 1.1890 +/* Added at libpng version 1.2.4 */ 1.1891 +PNG_EXPORTA(96, png_voidp, png_malloc_warn, (png_const_structrp png_ptr, 1.1892 + png_alloc_size_t size), PNG_ALLOCATED); 1.1893 + 1.1894 +/* Frees a pointer allocated by png_malloc() */ 1.1895 +PNG_EXPORT(97, void, png_free, (png_const_structrp png_ptr, png_voidp ptr)); 1.1896 + 1.1897 +/* Free data that was allocated internally */ 1.1898 +PNG_EXPORT(98, void, png_free_data, (png_const_structrp png_ptr, 1.1899 + png_inforp info_ptr, png_uint_32 free_me, int num)); 1.1900 + 1.1901 +/* Reassign responsibility for freeing existing data, whether allocated 1.1902 + * by libpng or by the application; this works on the png_info structure passed 1.1903 + * in, it does not change the state for other png_info structures. 1.1904 + * 1.1905 + * It is unlikely that this function works correctly as of 1.6.0 and using it 1.1906 + * may result either in memory leaks or double free of allocated data. 1.1907 + */ 1.1908 +PNG_EXPORT(99, void, png_data_freer, (png_const_structrp png_ptr, 1.1909 + png_inforp info_ptr, int freer, png_uint_32 mask)); 1.1910 + 1.1911 +/* Assignments for png_data_freer */ 1.1912 +#define PNG_DESTROY_WILL_FREE_DATA 1 1.1913 +#define PNG_SET_WILL_FREE_DATA 1 1.1914 +#define PNG_USER_WILL_FREE_DATA 2 1.1915 +/* Flags for png_ptr->free_me and info_ptr->free_me */ 1.1916 +#define PNG_FREE_HIST 0x0008 1.1917 +#define PNG_FREE_ICCP 0x0010 1.1918 +#define PNG_FREE_SPLT 0x0020 1.1919 +#define PNG_FREE_ROWS 0x0040 1.1920 +#define PNG_FREE_PCAL 0x0080 1.1921 +#define PNG_FREE_SCAL 0x0100 1.1922 +#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED 1.1923 +# define PNG_FREE_UNKN 0x0200 1.1924 +#endif 1.1925 +/* PNG_FREE_LIST 0x0400 removed in 1.6.0 because it is ignored */ 1.1926 +#define PNG_FREE_PLTE 0x1000 1.1927 +#define PNG_FREE_TRNS 0x2000 1.1928 +#define PNG_FREE_TEXT 0x4000 1.1929 +#define PNG_FREE_ALL 0x7fff 1.1930 +#define PNG_FREE_MUL 0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */ 1.1931 + 1.1932 +#ifdef PNG_USER_MEM_SUPPORTED 1.1933 +PNG_EXPORTA(100, png_voidp, png_malloc_default, (png_const_structrp png_ptr, 1.1934 + png_alloc_size_t size), PNG_ALLOCATED PNG_DEPRECATED); 1.1935 +PNG_EXPORTA(101, void, png_free_default, (png_const_structrp png_ptr, 1.1936 + png_voidp ptr), PNG_DEPRECATED); 1.1937 +#endif 1.1938 + 1.1939 +#ifdef PNG_ERROR_TEXT_SUPPORTED 1.1940 +/* Fatal error in PNG image of libpng - can't continue */ 1.1941 +PNG_EXPORTA(102, void, png_error, (png_const_structrp png_ptr, 1.1942 + png_const_charp error_message), PNG_NORETURN); 1.1943 + 1.1944 +/* The same, but the chunk name is prepended to the error string. */ 1.1945 +PNG_EXPORTA(103, void, png_chunk_error, (png_const_structrp png_ptr, 1.1946 + png_const_charp error_message), PNG_NORETURN); 1.1947 + 1.1948 +#else 1.1949 +/* Fatal error in PNG image of libpng - can't continue */ 1.1950 +PNG_EXPORTA(104, void, png_err, (png_const_structrp png_ptr), PNG_NORETURN); 1.1951 +# define png_error(s1,s2) png_err(s1) 1.1952 +# define png_chunk_error(s1,s2) png_err(s1) 1.1953 +#endif 1.1954 + 1.1955 +#ifdef PNG_WARNINGS_SUPPORTED 1.1956 +/* Non-fatal error in libpng. Can continue, but may have a problem. */ 1.1957 +PNG_EXPORT(105, void, png_warning, (png_const_structrp png_ptr, 1.1958 + png_const_charp warning_message)); 1.1959 + 1.1960 +/* Non-fatal error in libpng, chunk name is prepended to message. */ 1.1961 +PNG_EXPORT(106, void, png_chunk_warning, (png_const_structrp png_ptr, 1.1962 + png_const_charp warning_message)); 1.1963 +#else 1.1964 +# define png_warning(s1,s2) ((void)(s1)) 1.1965 +# define png_chunk_warning(s1,s2) ((void)(s1)) 1.1966 +#endif 1.1967 + 1.1968 +#ifdef PNG_BENIGN_ERRORS_SUPPORTED 1.1969 +/* Benign error in libpng. Can continue, but may have a problem. 1.1970 + * User can choose whether to handle as a fatal error or as a warning. */ 1.1971 +PNG_EXPORT(107, void, png_benign_error, (png_const_structrp png_ptr, 1.1972 + png_const_charp warning_message)); 1.1973 + 1.1974 +#ifdef PNG_READ_SUPPORTED 1.1975 +/* Same, chunk name is prepended to message (only during read) */ 1.1976 +PNG_EXPORT(108, void, png_chunk_benign_error, (png_const_structrp png_ptr, 1.1977 + png_const_charp warning_message)); 1.1978 +#endif 1.1979 + 1.1980 +PNG_EXPORT(109, void, png_set_benign_errors, 1.1981 + (png_structrp png_ptr, int allowed)); 1.1982 +#else 1.1983 +# ifdef PNG_ALLOW_BENIGN_ERRORS 1.1984 +# define png_benign_error png_warning 1.1985 +# define png_chunk_benign_error png_chunk_warning 1.1986 +# else 1.1987 +# define png_benign_error png_error 1.1988 +# define png_chunk_benign_error png_chunk_error 1.1989 +# endif 1.1990 +#endif 1.1991 + 1.1992 +/* The png_set_<chunk> functions are for storing values in the png_info_struct. 1.1993 + * Similarly, the png_get_<chunk> calls are used to read values from the 1.1994 + * png_info_struct, either storing the parameters in the passed variables, or 1.1995 + * setting pointers into the png_info_struct where the data is stored. The 1.1996 + * png_get_<chunk> functions return a non-zero value if the data was available 1.1997 + * in info_ptr, or return zero and do not change any of the parameters if the 1.1998 + * data was not available. 1.1999 + * 1.2000 + * These functions should be used instead of directly accessing png_info 1.2001 + * to avoid problems with future changes in the size and internal layout of 1.2002 + * png_info_struct. 1.2003 + */ 1.2004 +/* Returns "flag" if chunk data is valid in info_ptr. */ 1.2005 +PNG_EXPORT(110, png_uint_32, png_get_valid, (png_const_structrp png_ptr, 1.2006 + png_const_inforp info_ptr, png_uint_32 flag)); 1.2007 + 1.2008 +/* Returns number of bytes needed to hold a transformed row. */ 1.2009 +PNG_EXPORT(111, png_size_t, png_get_rowbytes, (png_const_structrp png_ptr, 1.2010 + png_const_inforp info_ptr)); 1.2011 + 1.2012 +#ifdef PNG_INFO_IMAGE_SUPPORTED 1.2013 +/* Returns row_pointers, which is an array of pointers to scanlines that was 1.2014 + * returned from png_read_png(). 1.2015 + */ 1.2016 +PNG_EXPORT(112, png_bytepp, png_get_rows, (png_const_structrp png_ptr, 1.2017 + png_const_inforp info_ptr)); 1.2018 + 1.2019 +/* Set row_pointers, which is an array of pointers to scanlines for use 1.2020 + * by png_write_png(). 1.2021 + */ 1.2022 +PNG_EXPORT(113, void, png_set_rows, (png_const_structrp png_ptr, 1.2023 + png_inforp info_ptr, png_bytepp row_pointers)); 1.2024 +#endif 1.2025 + 1.2026 +/* Returns number of color channels in image. */ 1.2027 +PNG_EXPORT(114, png_byte, png_get_channels, (png_const_structrp png_ptr, 1.2028 + png_const_inforp info_ptr)); 1.2029 + 1.2030 +#ifdef PNG_EASY_ACCESS_SUPPORTED 1.2031 +/* Returns image width in pixels. */ 1.2032 +PNG_EXPORT(115, png_uint_32, png_get_image_width, (png_const_structrp png_ptr, 1.2033 + png_const_inforp info_ptr)); 1.2034 + 1.2035 +/* Returns image height in pixels. */ 1.2036 +PNG_EXPORT(116, png_uint_32, png_get_image_height, (png_const_structrp png_ptr, 1.2037 + png_const_inforp info_ptr)); 1.2038 + 1.2039 +/* Returns image bit_depth. */ 1.2040 +PNG_EXPORT(117, png_byte, png_get_bit_depth, (png_const_structrp png_ptr, 1.2041 + png_const_inforp info_ptr)); 1.2042 + 1.2043 +/* Returns image color_type. */ 1.2044 +PNG_EXPORT(118, png_byte, png_get_color_type, (png_const_structrp png_ptr, 1.2045 + png_const_inforp info_ptr)); 1.2046 + 1.2047 +/* Returns image filter_type. */ 1.2048 +PNG_EXPORT(119, png_byte, png_get_filter_type, (png_const_structrp png_ptr, 1.2049 + png_const_inforp info_ptr)); 1.2050 + 1.2051 +/* Returns image interlace_type. */ 1.2052 +PNG_EXPORT(120, png_byte, png_get_interlace_type, (png_const_structrp png_ptr, 1.2053 + png_const_inforp info_ptr)); 1.2054 + 1.2055 +/* Returns image compression_type. */ 1.2056 +PNG_EXPORT(121, png_byte, png_get_compression_type, (png_const_structrp png_ptr, 1.2057 + png_const_inforp info_ptr)); 1.2058 + 1.2059 +/* Returns image resolution in pixels per meter, from pHYs chunk data. */ 1.2060 +PNG_EXPORT(122, png_uint_32, png_get_pixels_per_meter, 1.2061 + (png_const_structrp png_ptr, png_const_inforp info_ptr)); 1.2062 +PNG_EXPORT(123, png_uint_32, png_get_x_pixels_per_meter, 1.2063 + (png_const_structrp png_ptr, png_const_inforp info_ptr)); 1.2064 +PNG_EXPORT(124, png_uint_32, png_get_y_pixels_per_meter, 1.2065 + (png_const_structrp png_ptr, png_const_inforp info_ptr)); 1.2066 + 1.2067 +/* Returns pixel aspect ratio, computed from pHYs chunk data. */ 1.2068 +PNG_FP_EXPORT(125, float, png_get_pixel_aspect_ratio, 1.2069 + (png_const_structrp png_ptr, png_const_inforp info_ptr)) 1.2070 +PNG_FIXED_EXPORT(210, png_fixed_point, png_get_pixel_aspect_ratio_fixed, 1.2071 + (png_const_structrp png_ptr, png_const_inforp info_ptr)) 1.2072 + 1.2073 +/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ 1.2074 +PNG_EXPORT(126, png_int_32, png_get_x_offset_pixels, 1.2075 + (png_const_structrp png_ptr, png_const_inforp info_ptr)); 1.2076 +PNG_EXPORT(127, png_int_32, png_get_y_offset_pixels, 1.2077 + (png_const_structrp png_ptr, png_const_inforp info_ptr)); 1.2078 +PNG_EXPORT(128, png_int_32, png_get_x_offset_microns, 1.2079 + (png_const_structrp png_ptr, png_const_inforp info_ptr)); 1.2080 +PNG_EXPORT(129, png_int_32, png_get_y_offset_microns, 1.2081 + (png_const_structrp png_ptr, png_const_inforp info_ptr)); 1.2082 + 1.2083 +#endif /* PNG_EASY_ACCESS_SUPPORTED */ 1.2084 + 1.2085 +#ifdef PNG_READ_SUPPORTED 1.2086 +/* Returns pointer to signature string read from PNG header */ 1.2087 +PNG_EXPORT(130, png_const_bytep, png_get_signature, (png_const_structrp png_ptr, 1.2088 + png_const_inforp info_ptr)); 1.2089 +#endif 1.2090 + 1.2091 +#ifdef PNG_bKGD_SUPPORTED 1.2092 +PNG_EXPORT(131, png_uint_32, png_get_bKGD, (png_const_structrp png_ptr, 1.2093 + png_inforp info_ptr, png_color_16p *background)); 1.2094 +#endif 1.2095 + 1.2096 +#ifdef PNG_bKGD_SUPPORTED 1.2097 +PNG_EXPORT(132, void, png_set_bKGD, (png_const_structrp png_ptr, 1.2098 + png_inforp info_ptr, png_const_color_16p background)); 1.2099 +#endif 1.2100 + 1.2101 +#ifdef PNG_cHRM_SUPPORTED 1.2102 +PNG_FP_EXPORT(133, png_uint_32, png_get_cHRM, (png_const_structrp png_ptr, 1.2103 + png_const_inforp info_ptr, double *white_x, double *white_y, double *red_x, 1.2104 + double *red_y, double *green_x, double *green_y, double *blue_x, 1.2105 + double *blue_y)) 1.2106 +PNG_FP_EXPORT(230, png_uint_32, png_get_cHRM_XYZ, (png_const_structrp png_ptr, 1.2107 + png_const_inforp info_ptr, double *red_X, double *red_Y, double *red_Z, 1.2108 + double *green_X, double *green_Y, double *green_Z, double *blue_X, 1.2109 + double *blue_Y, double *blue_Z)) 1.2110 +PNG_FIXED_EXPORT(134, png_uint_32, png_get_cHRM_fixed, 1.2111 + (png_const_structrp png_ptr, png_const_inforp info_ptr, 1.2112 + png_fixed_point *int_white_x, png_fixed_point *int_white_y, 1.2113 + png_fixed_point *int_red_x, png_fixed_point *int_red_y, 1.2114 + png_fixed_point *int_green_x, png_fixed_point *int_green_y, 1.2115 + png_fixed_point *int_blue_x, png_fixed_point *int_blue_y)) 1.2116 +PNG_FIXED_EXPORT(231, png_uint_32, png_get_cHRM_XYZ_fixed, 1.2117 + (png_const_structrp png_ptr, png_const_inforp info_ptr, 1.2118 + png_fixed_point *int_red_X, png_fixed_point *int_red_Y, 1.2119 + png_fixed_point *int_red_Z, png_fixed_point *int_green_X, 1.2120 + png_fixed_point *int_green_Y, png_fixed_point *int_green_Z, 1.2121 + png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y, 1.2122 + png_fixed_point *int_blue_Z)) 1.2123 +#endif 1.2124 + 1.2125 +#ifdef PNG_cHRM_SUPPORTED 1.2126 +PNG_FP_EXPORT(135, void, png_set_cHRM, (png_const_structrp png_ptr, 1.2127 + png_inforp info_ptr, 1.2128 + double white_x, double white_y, double red_x, double red_y, double green_x, 1.2129 + double green_y, double blue_x, double blue_y)) 1.2130 +PNG_FP_EXPORT(232, void, png_set_cHRM_XYZ, (png_const_structrp png_ptr, 1.2131 + png_inforp info_ptr, double red_X, double red_Y, double red_Z, 1.2132 + double green_X, double green_Y, double green_Z, double blue_X, 1.2133 + double blue_Y, double blue_Z)) 1.2134 +PNG_FIXED_EXPORT(136, void, png_set_cHRM_fixed, (png_const_structrp png_ptr, 1.2135 + png_inforp info_ptr, png_fixed_point int_white_x, 1.2136 + png_fixed_point int_white_y, png_fixed_point int_red_x, 1.2137 + png_fixed_point int_red_y, png_fixed_point int_green_x, 1.2138 + png_fixed_point int_green_y, png_fixed_point int_blue_x, 1.2139 + png_fixed_point int_blue_y)) 1.2140 +PNG_FIXED_EXPORT(233, void, png_set_cHRM_XYZ_fixed, (png_const_structrp png_ptr, 1.2141 + png_inforp info_ptr, png_fixed_point int_red_X, png_fixed_point int_red_Y, 1.2142 + png_fixed_point int_red_Z, png_fixed_point int_green_X, 1.2143 + png_fixed_point int_green_Y, png_fixed_point int_green_Z, 1.2144 + png_fixed_point int_blue_X, png_fixed_point int_blue_Y, 1.2145 + png_fixed_point int_blue_Z)) 1.2146 +#endif 1.2147 + 1.2148 +#ifdef PNG_gAMA_SUPPORTED 1.2149 +PNG_FP_EXPORT(137, png_uint_32, png_get_gAMA, (png_const_structrp png_ptr, 1.2150 + png_const_inforp info_ptr, double *file_gamma)) 1.2151 +PNG_FIXED_EXPORT(138, png_uint_32, png_get_gAMA_fixed, 1.2152 + (png_const_structrp png_ptr, png_const_inforp info_ptr, 1.2153 + png_fixed_point *int_file_gamma)) 1.2154 +#endif 1.2155 + 1.2156 +#ifdef PNG_gAMA_SUPPORTED 1.2157 +PNG_FP_EXPORT(139, void, png_set_gAMA, (png_const_structrp png_ptr, 1.2158 + png_inforp info_ptr, double file_gamma)) 1.2159 +PNG_FIXED_EXPORT(140, void, png_set_gAMA_fixed, (png_const_structrp png_ptr, 1.2160 + png_inforp info_ptr, png_fixed_point int_file_gamma)) 1.2161 +#endif 1.2162 + 1.2163 +#ifdef PNG_hIST_SUPPORTED 1.2164 +PNG_EXPORT(141, png_uint_32, png_get_hIST, (png_const_structrp png_ptr, 1.2165 + png_inforp info_ptr, png_uint_16p *hist)); 1.2166 +#endif 1.2167 + 1.2168 +#ifdef PNG_hIST_SUPPORTED 1.2169 +PNG_EXPORT(142, void, png_set_hIST, (png_const_structrp png_ptr, 1.2170 + png_inforp info_ptr, png_const_uint_16p hist)); 1.2171 +#endif 1.2172 + 1.2173 +PNG_EXPORT(143, png_uint_32, png_get_IHDR, (png_const_structrp png_ptr, 1.2174 + png_const_inforp info_ptr, png_uint_32 *width, png_uint_32 *height, 1.2175 + int *bit_depth, int *color_type, int *interlace_method, 1.2176 + int *compression_method, int *filter_method)); 1.2177 + 1.2178 +PNG_EXPORT(144, void, png_set_IHDR, (png_const_structrp png_ptr, 1.2179 + png_inforp info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, 1.2180 + int color_type, int interlace_method, int compression_method, 1.2181 + int filter_method)); 1.2182 + 1.2183 +#ifdef PNG_oFFs_SUPPORTED 1.2184 +PNG_EXPORT(145, png_uint_32, png_get_oFFs, (png_const_structrp png_ptr, 1.2185 + png_const_inforp info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, 1.2186 + int *unit_type)); 1.2187 +#endif 1.2188 + 1.2189 +#ifdef PNG_oFFs_SUPPORTED 1.2190 +PNG_EXPORT(146, void, png_set_oFFs, (png_const_structrp png_ptr, 1.2191 + png_inforp info_ptr, png_int_32 offset_x, png_int_32 offset_y, 1.2192 + int unit_type)); 1.2193 +#endif 1.2194 + 1.2195 +#ifdef PNG_pCAL_SUPPORTED 1.2196 +PNG_EXPORT(147, png_uint_32, png_get_pCAL, (png_const_structrp png_ptr, 1.2197 + png_inforp info_ptr, png_charp *purpose, png_int_32 *X0, 1.2198 + png_int_32 *X1, int *type, int *nparams, png_charp *units, 1.2199 + png_charpp *params)); 1.2200 +#endif 1.2201 + 1.2202 +#ifdef PNG_pCAL_SUPPORTED 1.2203 +PNG_EXPORT(148, void, png_set_pCAL, (png_const_structrp png_ptr, 1.2204 + png_inforp info_ptr, png_const_charp purpose, png_int_32 X0, png_int_32 X1, 1.2205 + int type, int nparams, png_const_charp units, png_charpp params)); 1.2206 +#endif 1.2207 + 1.2208 +#ifdef PNG_pHYs_SUPPORTED 1.2209 +PNG_EXPORT(149, png_uint_32, png_get_pHYs, (png_const_structrp png_ptr, 1.2210 + png_const_inforp info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, 1.2211 + int *unit_type)); 1.2212 +#endif 1.2213 + 1.2214 +#ifdef PNG_pHYs_SUPPORTED 1.2215 +PNG_EXPORT(150, void, png_set_pHYs, (png_const_structrp png_ptr, 1.2216 + png_inforp info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type)); 1.2217 +#endif 1.2218 + 1.2219 +PNG_EXPORT(151, png_uint_32, png_get_PLTE, (png_const_structrp png_ptr, 1.2220 + png_inforp info_ptr, png_colorp *palette, int *num_palette)); 1.2221 + 1.2222 +PNG_EXPORT(152, void, png_set_PLTE, (png_structrp png_ptr, 1.2223 + png_inforp info_ptr, png_const_colorp palette, int num_palette)); 1.2224 + 1.2225 +#ifdef PNG_sBIT_SUPPORTED 1.2226 +PNG_EXPORT(153, png_uint_32, png_get_sBIT, (png_const_structrp png_ptr, 1.2227 + png_inforp info_ptr, png_color_8p *sig_bit)); 1.2228 +#endif 1.2229 + 1.2230 +#ifdef PNG_sBIT_SUPPORTED 1.2231 +PNG_EXPORT(154, void, png_set_sBIT, (png_const_structrp png_ptr, 1.2232 + png_inforp info_ptr, png_const_color_8p sig_bit)); 1.2233 +#endif 1.2234 + 1.2235 +#ifdef PNG_sRGB_SUPPORTED 1.2236 +PNG_EXPORT(155, png_uint_32, png_get_sRGB, (png_const_structrp png_ptr, 1.2237 + png_const_inforp info_ptr, int *file_srgb_intent)); 1.2238 +#endif 1.2239 + 1.2240 +#ifdef PNG_sRGB_SUPPORTED 1.2241 +PNG_EXPORT(156, void, png_set_sRGB, (png_const_structrp png_ptr, 1.2242 + png_inforp info_ptr, int srgb_intent)); 1.2243 +PNG_EXPORT(157, void, png_set_sRGB_gAMA_and_cHRM, (png_const_structrp png_ptr, 1.2244 + png_inforp info_ptr, int srgb_intent)); 1.2245 +#endif 1.2246 + 1.2247 +#ifdef PNG_iCCP_SUPPORTED 1.2248 +PNG_EXPORT(158, png_uint_32, png_get_iCCP, (png_const_structrp png_ptr, 1.2249 + png_inforp info_ptr, png_charpp name, int *compression_type, 1.2250 + png_bytepp profile, png_uint_32 *proflen)); 1.2251 +#endif 1.2252 + 1.2253 +#ifdef PNG_iCCP_SUPPORTED 1.2254 +PNG_EXPORT(159, void, png_set_iCCP, (png_const_structrp png_ptr, 1.2255 + png_inforp info_ptr, png_const_charp name, int compression_type, 1.2256 + png_const_bytep profile, png_uint_32 proflen)); 1.2257 +#endif 1.2258 + 1.2259 +#ifdef PNG_sPLT_SUPPORTED 1.2260 +PNG_EXPORT(160, int, png_get_sPLT, (png_const_structrp png_ptr, 1.2261 + png_inforp info_ptr, png_sPLT_tpp entries)); 1.2262 +#endif 1.2263 + 1.2264 +#ifdef PNG_sPLT_SUPPORTED 1.2265 +PNG_EXPORT(161, void, png_set_sPLT, (png_const_structrp png_ptr, 1.2266 + png_inforp info_ptr, png_const_sPLT_tp entries, int nentries)); 1.2267 +#endif 1.2268 + 1.2269 +#ifdef PNG_TEXT_SUPPORTED 1.2270 +/* png_get_text also returns the number of text chunks in *num_text */ 1.2271 +PNG_EXPORT(162, int, png_get_text, (png_const_structrp png_ptr, 1.2272 + png_inforp info_ptr, png_textp *text_ptr, int *num_text)); 1.2273 +#endif 1.2274 + 1.2275 +/* Note while png_set_text() will accept a structure whose text, 1.2276 + * language, and translated keywords are NULL pointers, the structure 1.2277 + * returned by png_get_text will always contain regular 1.2278 + * zero-terminated C strings. They might be empty strings but 1.2279 + * they will never be NULL pointers. 1.2280 + */ 1.2281 + 1.2282 +#ifdef PNG_TEXT_SUPPORTED 1.2283 +PNG_EXPORT(163, void, png_set_text, (png_const_structrp png_ptr, 1.2284 + png_inforp info_ptr, png_const_textp text_ptr, int num_text)); 1.2285 +#endif 1.2286 + 1.2287 +#ifdef PNG_tIME_SUPPORTED 1.2288 +PNG_EXPORT(164, png_uint_32, png_get_tIME, (png_const_structrp png_ptr, 1.2289 + png_inforp info_ptr, png_timep *mod_time)); 1.2290 +#endif 1.2291 + 1.2292 +#ifdef PNG_tIME_SUPPORTED 1.2293 +PNG_EXPORT(165, void, png_set_tIME, (png_const_structrp png_ptr, 1.2294 + png_inforp info_ptr, png_const_timep mod_time)); 1.2295 +#endif 1.2296 + 1.2297 +#ifdef PNG_tRNS_SUPPORTED 1.2298 +PNG_EXPORT(166, png_uint_32, png_get_tRNS, (png_const_structrp png_ptr, 1.2299 + png_inforp info_ptr, png_bytep *trans_alpha, int *num_trans, 1.2300 + png_color_16p *trans_color)); 1.2301 +#endif 1.2302 + 1.2303 +#ifdef PNG_tRNS_SUPPORTED 1.2304 +PNG_EXPORT(167, void, png_set_tRNS, (png_structrp png_ptr, 1.2305 + png_inforp info_ptr, png_const_bytep trans_alpha, int num_trans, 1.2306 + png_const_color_16p trans_color)); 1.2307 +#endif 1.2308 + 1.2309 +#ifdef PNG_sCAL_SUPPORTED 1.2310 +PNG_FP_EXPORT(168, png_uint_32, png_get_sCAL, (png_const_structrp png_ptr, 1.2311 + png_const_inforp info_ptr, int *unit, double *width, double *height)) 1.2312 +#if defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) || \ 1.2313 + defined(PNG_FLOATING_POINT_SUPPORTED) 1.2314 +/* NOTE: this API is currently implemented using floating point arithmetic, 1.2315 + * consequently it can only be used on systems with floating point support. 1.2316 + * In any case the range of values supported by png_fixed_point is small and it 1.2317 + * is highly recommended that png_get_sCAL_s be used instead. 1.2318 + */ 1.2319 +PNG_FIXED_EXPORT(214, png_uint_32, png_get_sCAL_fixed, 1.2320 + (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit, 1.2321 + png_fixed_point *width, png_fixed_point *height)) 1.2322 +#endif 1.2323 +PNG_EXPORT(169, png_uint_32, png_get_sCAL_s, 1.2324 + (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit, 1.2325 + png_charpp swidth, png_charpp sheight)); 1.2326 + 1.2327 +PNG_FP_EXPORT(170, void, png_set_sCAL, (png_const_structrp png_ptr, 1.2328 + png_inforp info_ptr, int unit, double width, double height)) 1.2329 +PNG_FIXED_EXPORT(213, void, png_set_sCAL_fixed, (png_const_structrp png_ptr, 1.2330 + png_inforp info_ptr, int unit, png_fixed_point width, 1.2331 + png_fixed_point height)) 1.2332 +PNG_EXPORT(171, void, png_set_sCAL_s, (png_const_structrp png_ptr, 1.2333 + png_inforp info_ptr, int unit, 1.2334 + png_const_charp swidth, png_const_charp sheight)); 1.2335 +#endif /* PNG_sCAL_SUPPORTED */ 1.2336 + 1.2337 +#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED 1.2338 +/* Provide the default handling for all unknown chunks or, optionally, for 1.2339 + * specific unknown chunks. 1.2340 + * 1.2341 + * NOTE: prior to 1.6.0 the handling specified for particular chunks on read was 1.2342 + * ignored and the default was used, the per-chunk setting only had an effect on 1.2343 + * write. If you wish to have chunk-specific handling on read in code that must 1.2344 + * work on earlier versions you must use a user chunk callback to specify the 1.2345 + * desired handling (keep or discard.) 1.2346 + * 1.2347 + * The 'keep' parameter is a PNG_HANDLE_CHUNK_ value as listed below. The 1.2348 + * parameter is interpreted as follows: 1.2349 + * 1.2350 + * READ: 1.2351 + * PNG_HANDLE_CHUNK_AS_DEFAULT: 1.2352 + * Known chunks: do normal libpng processing, do not keep the chunk (but 1.2353 + * see the comments below about PNG_HANDLE_AS_UNKNOWN_SUPPORTED) 1.2354 + * Unknown chunks: for a specific chunk use the global default, when used 1.2355 + * as the default discard the chunk data. 1.2356 + * PNG_HANDLE_CHUNK_NEVER: 1.2357 + * Discard the chunk data. 1.2358 + * PNG_HANDLE_CHUNK_IF_SAFE: 1.2359 + * Keep the chunk data if the chunk is not critical else raise a chunk 1.2360 + * error. 1.2361 + * PNG_HANDLE_CHUNK_ALWAYS: 1.2362 + * Keep the chunk data. 1.2363 + * 1.2364 + * If the chunk data is saved it can be retrieved using png_get_unknown_chunks, 1.2365 + * below. Notice that specifying "AS_DEFAULT" as a global default is equivalent 1.2366 + * to specifying "NEVER", however when "AS_DEFAULT" is used for specific chunks 1.2367 + * it simply resets the behavior to the libpng default. 1.2368 + * 1.2369 + * INTERACTION WTIH USER CHUNK CALLBACKS: 1.2370 + * The per-chunk handling is always used when there is a png_user_chunk_ptr 1.2371 + * callback and the callback returns 0; the chunk is then always stored *unless* 1.2372 + * it is critical and the per-chunk setting is other than ALWAYS. Notice that 1.2373 + * the global default is *not* used in this case. (In effect the per-chunk 1.2374 + * value is incremented to at least IF_SAFE.) 1.2375 + * 1.2376 + * IMPORTANT NOTE: this behavior will change in libpng 1.7 - the global and 1.2377 + * per-chunk defaults will be honored. If you want to preserve the current 1.2378 + * behavior when your callback returns 0 you must set PNG_HANDLE_CHUNK_IF_SAFE 1.2379 + * as the default - if you don't do this libpng 1.6 will issue a warning. 1.2380 + * 1.2381 + * If you want unhandled unknown chunks to be discarded in libpng 1.6 and 1.2382 + * earlier simply return '1' (handled). 1.2383 + * 1.2384 + * PNG_HANDLE_AS_UNKNOWN_SUPPORTED: 1.2385 + * If this is *not* set known chunks will always be handled by libpng and 1.2386 + * will never be stored in the unknown chunk list. Known chunks listed to 1.2387 + * png_set_keep_unknown_chunks will have no effect. If it is set then known 1.2388 + * chunks listed with a keep other than AS_DEFAULT will *never* be processed 1.2389 + * by libpng, in addition critical chunks must either be processed by the 1.2390 + * callback or saved. 1.2391 + * 1.2392 + * The IHDR and IEND chunks must not be listed. Because this turns off the 1.2393 + * default handling for chunks that would otherwise be recognized the 1.2394 + * behavior of libpng transformations may well become incorrect! 1.2395 + * 1.2396 + * WRITE: 1.2397 + * When writing chunks the options only apply to the chunks specified by 1.2398 + * png_set_unknown_chunks (below), libpng will *always* write known chunks 1.2399 + * required by png_set_ calls and will always write the core critical chunks 1.2400 + * (as required for PLTE). 1.2401 + * 1.2402 + * Each chunk in the png_set_unknown_chunks list is looked up in the 1.2403 + * png_set_keep_unknown_chunks list to find the keep setting, this is then 1.2404 + * interpreted as follows: 1.2405 + * 1.2406 + * PNG_HANDLE_CHUNK_AS_DEFAULT: 1.2407 + * Write safe-to-copy chunks and write other chunks if the global 1.2408 + * default is set to _ALWAYS, otherwise don't write this chunk. 1.2409 + * PNG_HANDLE_CHUNK_NEVER: 1.2410 + * Do not write the chunk. 1.2411 + * PNG_HANDLE_CHUNK_IF_SAFE: 1.2412 + * Write the chunk if it is safe-to-copy, otherwise do not write it. 1.2413 + * PNG_HANDLE_CHUNK_ALWAYS: 1.2414 + * Write the chunk. 1.2415 + * 1.2416 + * Note that the default behavior is effectively the opposite of the read case - 1.2417 + * in read unknown chunks are not stored by default, in write they are written 1.2418 + * by default. Also the behavior of PNG_HANDLE_CHUNK_IF_SAFE is very different 1.2419 + * - on write the safe-to-copy bit is checked, on read the critical bit is 1.2420 + * checked and on read if the chunk is critical an error will be raised. 1.2421 + * 1.2422 + * num_chunks: 1.2423 + * =========== 1.2424 + * If num_chunks is positive, then the "keep" parameter specifies the manner 1.2425 + * for handling only those chunks appearing in the chunk_list array, 1.2426 + * otherwise the chunk list array is ignored. 1.2427 + * 1.2428 + * If num_chunks is 0 the "keep" parameter specifies the default behavior for 1.2429 + * unknown chunks, as described above. 1.2430 + * 1.2431 + * If num_chunks is negative, then the "keep" parameter specifies the manner 1.2432 + * for handling all unknown chunks plus all chunks recognized by libpng 1.2433 + * except for the IHDR, PLTE, tRNS, IDAT, and IEND chunks (which continue to 1.2434 + * be processed by libpng. 1.2435 + */ 1.2436 +PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr, 1.2437 + int keep, png_const_bytep chunk_list, int num_chunks)); 1.2438 + 1.2439 +/* The "keep" PNG_HANDLE_CHUNK_ parameter for the specified chunk is returned; 1.2440 + * the result is therefore true (non-zero) if special handling is required, 1.2441 + * false for the default handling. 1.2442 + */ 1.2443 +PNG_EXPORT(173, int, png_handle_as_unknown, (png_const_structrp png_ptr, 1.2444 + png_const_bytep chunk_name)); 1.2445 +#endif 1.2446 + 1.2447 +#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED 1.2448 +PNG_EXPORT(174, void, png_set_unknown_chunks, (png_const_structrp png_ptr, 1.2449 + png_inforp info_ptr, png_const_unknown_chunkp unknowns, 1.2450 + int num_unknowns)); 1.2451 + /* NOTE: prior to 1.6.0 this routine set the 'location' field of the added 1.2452 + * unknowns to the location currently stored in the png_struct. This is 1.2453 + * invariably the wrong value on write. To fix this call the following API 1.2454 + * for each chunk in the list with the correct location. If you know your 1.2455 + * code won't be compiled on earlier versions you can rely on 1.2456 + * png_set_unknown_chunks(write-ptr, png_get_unknown_chunks(read-ptr)) doing 1.2457 + * the correct thing. 1.2458 + */ 1.2459 + 1.2460 +PNG_EXPORT(175, void, png_set_unknown_chunk_location, 1.2461 + (png_const_structrp png_ptr, png_inforp info_ptr, int chunk, int location)); 1.2462 + 1.2463 +PNG_EXPORT(176, int, png_get_unknown_chunks, (png_const_structrp png_ptr, 1.2464 + png_inforp info_ptr, png_unknown_chunkpp entries)); 1.2465 +#endif 1.2466 + 1.2467 +/* Png_free_data() will turn off the "valid" flag for anything it frees. 1.2468 + * If you need to turn it off for a chunk that your application has freed, 1.2469 + * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); 1.2470 + */ 1.2471 +PNG_EXPORT(177, void, png_set_invalid, (png_const_structrp png_ptr, 1.2472 + png_inforp info_ptr, int mask)); 1.2473 + 1.2474 +#ifdef PNG_INFO_IMAGE_SUPPORTED 1.2475 +/* The "params" pointer is currently not used and is for future expansion. */ 1.2476 +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED 1.2477 +PNG_EXPORT(178, void, png_read_png, (png_structrp png_ptr, png_inforp info_ptr, 1.2478 + int transforms, png_voidp params)); 1.2479 +#endif 1.2480 +#ifdef PNG_WRITE_SUPPORTED 1.2481 +PNG_EXPORT(179, void, png_write_png, (png_structrp png_ptr, png_inforp info_ptr, 1.2482 + int transforms, png_voidp params)); 1.2483 +#endif 1.2484 +#endif 1.2485 + 1.2486 +PNG_EXPORT(180, png_const_charp, png_get_copyright, 1.2487 + (png_const_structrp png_ptr)); 1.2488 +PNG_EXPORT(181, png_const_charp, png_get_header_ver, 1.2489 + (png_const_structrp png_ptr)); 1.2490 +PNG_EXPORT(182, png_const_charp, png_get_header_version, 1.2491 + (png_const_structrp png_ptr)); 1.2492 +PNG_EXPORT(183, png_const_charp, png_get_libpng_ver, 1.2493 + (png_const_structrp png_ptr)); 1.2494 + 1.2495 +#ifdef PNG_MNG_FEATURES_SUPPORTED 1.2496 +PNG_EXPORT(184, png_uint_32, png_permit_mng_features, (png_structrp png_ptr, 1.2497 + png_uint_32 mng_features_permitted)); 1.2498 +#endif 1.2499 + 1.2500 +/* For use in png_set_keep_unknown, added to version 1.2.6 */ 1.2501 +#define PNG_HANDLE_CHUNK_AS_DEFAULT 0 1.2502 +#define PNG_HANDLE_CHUNK_NEVER 1 1.2503 +#define PNG_HANDLE_CHUNK_IF_SAFE 2 1.2504 +#define PNG_HANDLE_CHUNK_ALWAYS 3 1.2505 +#define PNG_HANDLE_CHUNK_LAST 4 1.2506 + 1.2507 +/* Strip the prepended error numbers ("#nnn ") from error and warning 1.2508 + * messages before passing them to the error or warning handler. 1.2509 + */ 1.2510 +#ifdef PNG_ERROR_NUMBERS_SUPPORTED 1.2511 +PNG_EXPORT(185, void, png_set_strip_error_numbers, (png_structrp png_ptr, 1.2512 + png_uint_32 strip_mode)); 1.2513 +#endif 1.2514 + 1.2515 +/* Added in libpng-1.2.6 */ 1.2516 +#ifdef PNG_SET_USER_LIMITS_SUPPORTED 1.2517 +PNG_EXPORT(186, void, png_set_user_limits, (png_structrp png_ptr, 1.2518 + png_uint_32 user_width_max, png_uint_32 user_height_max)); 1.2519 +PNG_EXPORT(187, png_uint_32, png_get_user_width_max, 1.2520 + (png_const_structrp png_ptr)); 1.2521 +PNG_EXPORT(188, png_uint_32, png_get_user_height_max, 1.2522 + (png_const_structrp png_ptr)); 1.2523 +/* Added in libpng-1.4.0 */ 1.2524 +PNG_EXPORT(189, void, png_set_chunk_cache_max, (png_structrp png_ptr, 1.2525 + png_uint_32 user_chunk_cache_max)); 1.2526 +PNG_EXPORT(190, png_uint_32, png_get_chunk_cache_max, 1.2527 + (png_const_structrp png_ptr)); 1.2528 +/* Added in libpng-1.4.1 */ 1.2529 +PNG_EXPORT(191, void, png_set_chunk_malloc_max, (png_structrp png_ptr, 1.2530 + png_alloc_size_t user_chunk_cache_max)); 1.2531 +PNG_EXPORT(192, png_alloc_size_t, png_get_chunk_malloc_max, 1.2532 + (png_const_structrp png_ptr)); 1.2533 +#endif 1.2534 + 1.2535 +#if defined(PNG_INCH_CONVERSIONS_SUPPORTED) 1.2536 +PNG_EXPORT(193, png_uint_32, png_get_pixels_per_inch, 1.2537 + (png_const_structrp png_ptr, png_const_inforp info_ptr)); 1.2538 + 1.2539 +PNG_EXPORT(194, png_uint_32, png_get_x_pixels_per_inch, 1.2540 + (png_const_structrp png_ptr, png_const_inforp info_ptr)); 1.2541 + 1.2542 +PNG_EXPORT(195, png_uint_32, png_get_y_pixels_per_inch, 1.2543 + (png_const_structrp png_ptr, png_const_inforp info_ptr)); 1.2544 + 1.2545 +PNG_FP_EXPORT(196, float, png_get_x_offset_inches, 1.2546 + (png_const_structrp png_ptr, png_const_inforp info_ptr)) 1.2547 +#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */ 1.2548 +PNG_FIXED_EXPORT(211, png_fixed_point, png_get_x_offset_inches_fixed, 1.2549 + (png_const_structrp png_ptr, png_const_inforp info_ptr)) 1.2550 +#endif 1.2551 + 1.2552 +PNG_FP_EXPORT(197, float, png_get_y_offset_inches, (png_const_structrp png_ptr, 1.2553 + png_const_inforp info_ptr)) 1.2554 +#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */ 1.2555 +PNG_FIXED_EXPORT(212, png_fixed_point, png_get_y_offset_inches_fixed, 1.2556 + (png_const_structrp png_ptr, png_const_inforp info_ptr)) 1.2557 +#endif 1.2558 + 1.2559 +# ifdef PNG_pHYs_SUPPORTED 1.2560 +PNG_EXPORT(198, png_uint_32, png_get_pHYs_dpi, (png_const_structrp png_ptr, 1.2561 + png_const_inforp info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, 1.2562 + int *unit_type)); 1.2563 +# endif /* PNG_pHYs_SUPPORTED */ 1.2564 +#endif /* PNG_INCH_CONVERSIONS_SUPPORTED */ 1.2565 + 1.2566 +/* Added in libpng-1.4.0 */ 1.2567 +#ifdef PNG_IO_STATE_SUPPORTED 1.2568 +PNG_EXPORT(199, png_uint_32, png_get_io_state, (png_const_structrp png_ptr)); 1.2569 + 1.2570 +/* Removed from libpng 1.6; use png_get_io_chunk_type. */ 1.2571 +PNG_REMOVED(200, png_const_bytep, png_get_io_chunk_name, (png_structrp png_ptr), 1.2572 + PNG_DEPRECATED) 1.2573 + 1.2574 +PNG_EXPORT(216, png_uint_32, png_get_io_chunk_type, 1.2575 + (png_const_structrp png_ptr)); 1.2576 + 1.2577 +/* The flags returned by png_get_io_state() are the following: */ 1.2578 +# define PNG_IO_NONE 0x0000 /* no I/O at this moment */ 1.2579 +# define PNG_IO_READING 0x0001 /* currently reading */ 1.2580 +# define PNG_IO_WRITING 0x0002 /* currently writing */ 1.2581 +# define PNG_IO_SIGNATURE 0x0010 /* currently at the file signature */ 1.2582 +# define PNG_IO_CHUNK_HDR 0x0020 /* currently at the chunk header */ 1.2583 +# define PNG_IO_CHUNK_DATA 0x0040 /* currently at the chunk data */ 1.2584 +# define PNG_IO_CHUNK_CRC 0x0080 /* currently at the chunk crc */ 1.2585 +# define PNG_IO_MASK_OP 0x000f /* current operation: reading/writing */ 1.2586 +# define PNG_IO_MASK_LOC 0x00f0 /* current location: sig/hdr/data/crc */ 1.2587 +#endif /* ?PNG_IO_STATE_SUPPORTED */ 1.2588 + 1.2589 +/* Interlace support. The following macros are always defined so that if 1.2590 + * libpng interlace handling is turned off the macros may be used to handle 1.2591 + * interlaced images within the application. 1.2592 + */ 1.2593 +#define PNG_INTERLACE_ADAM7_PASSES 7 1.2594 + 1.2595 +/* Two macros to return the first row and first column of the original, 1.2596 + * full, image which appears in a given pass. 'pass' is in the range 0 1.2597 + * to 6 and the result is in the range 0 to 7. 1.2598 + */ 1.2599 +#define PNG_PASS_START_ROW(pass) (((1&~(pass))<<(3-((pass)>>1)))&7) 1.2600 +#define PNG_PASS_START_COL(pass) (((1& (pass))<<(3-(((pass)+1)>>1)))&7) 1.2601 + 1.2602 +/* A macro to return the offset between pixels in the output row for a pair of 1.2603 + * pixels in the input - effectively the inverse of the 'COL_SHIFT' macro that 1.2604 + * follows. Note that ROW_OFFSET is the offset from one row to the next whereas 1.2605 + * COL_OFFSET is from one column to the next, within a row. 1.2606 + */ 1.2607 +#define PNG_PASS_ROW_OFFSET(pass) ((pass)>2?(8>>(((pass)-1)>>1)):8) 1.2608 +#define PNG_PASS_COL_OFFSET(pass) (1<<((7-(pass))>>1)) 1.2609 + 1.2610 +/* Two macros to help evaluate the number of rows or columns in each 1.2611 + * pass. This is expressed as a shift - effectively log2 of the number or 1.2612 + * rows or columns in each 8x8 tile of the original image. 1.2613 + */ 1.2614 +#define PNG_PASS_ROW_SHIFT(pass) ((pass)>2?(8-(pass))>>1:3) 1.2615 +#define PNG_PASS_COL_SHIFT(pass) ((pass)>1?(7-(pass))>>1:3) 1.2616 + 1.2617 +/* Hence two macros to determine the number of rows or columns in a given 1.2618 + * pass of an image given its height or width. In fact these macros may 1.2619 + * return non-zero even though the sub-image is empty, because the other 1.2620 + * dimension may be empty for a small image. 1.2621 + */ 1.2622 +#define PNG_PASS_ROWS(height, pass) (((height)+(((1<<PNG_PASS_ROW_SHIFT(pass))\ 1.2623 + -1)-PNG_PASS_START_ROW(pass)))>>PNG_PASS_ROW_SHIFT(pass)) 1.2624 +#define PNG_PASS_COLS(width, pass) (((width)+(((1<<PNG_PASS_COL_SHIFT(pass))\ 1.2625 + -1)-PNG_PASS_START_COL(pass)))>>PNG_PASS_COL_SHIFT(pass)) 1.2626 + 1.2627 +/* For the reader row callbacks (both progressive and sequential) it is 1.2628 + * necessary to find the row in the output image given a row in an interlaced 1.2629 + * image, so two more macros: 1.2630 + */ 1.2631 +#define PNG_ROW_FROM_PASS_ROW(y_in, pass) \ 1.2632 + (((y_in)<<PNG_PASS_ROW_SHIFT(pass))+PNG_PASS_START_ROW(pass)) 1.2633 +#define PNG_COL_FROM_PASS_COL(x_in, pass) \ 1.2634 + (((x_in)<<PNG_PASS_COL_SHIFT(pass))+PNG_PASS_START_COL(pass)) 1.2635 + 1.2636 +/* Two macros which return a boolean (0 or 1) saying whether the given row 1.2637 + * or column is in a particular pass. These use a common utility macro that 1.2638 + * returns a mask for a given pass - the offset 'off' selects the row or 1.2639 + * column version. The mask has the appropriate bit set for each column in 1.2640 + * the tile. 1.2641 + */ 1.2642 +#define PNG_PASS_MASK(pass,off) ( \ 1.2643 + ((0x110145AF>>(((7-(off))-(pass))<<2)) & 0xF) | \ 1.2644 + ((0x01145AF0>>(((7-(off))-(pass))<<2)) & 0xF0)) 1.2645 + 1.2646 +#define PNG_ROW_IN_INTERLACE_PASS(y, pass) \ 1.2647 + ((PNG_PASS_MASK(pass,0) >> ((y)&7)) & 1) 1.2648 +#define PNG_COL_IN_INTERLACE_PASS(x, pass) \ 1.2649 + ((PNG_PASS_MASK(pass,1) >> ((x)&7)) & 1) 1.2650 + 1.2651 +#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED 1.2652 +/* With these routines we avoid an integer divide, which will be slower on 1.2653 + * most machines. However, it does take more operations than the corresponding 1.2654 + * divide method, so it may be slower on a few RISC systems. There are two 1.2655 + * shifts (by 8 or 16 bits) and an addition, versus a single integer divide. 1.2656 + * 1.2657 + * Note that the rounding factors are NOT supposed to be the same! 128 and 1.2658 + * 32768 are correct for the NODIV code; 127 and 32767 are correct for the 1.2659 + * standard method. 1.2660 + * 1.2661 + * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ] 1.2662 + */ 1.2663 + 1.2664 + /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */ 1.2665 + 1.2666 +# define png_composite(composite, fg, alpha, bg) \ 1.2667 + { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \ 1.2668 + * (png_uint_16)(alpha) \ 1.2669 + + (png_uint_16)(bg)*(png_uint_16)(255 \ 1.2670 + - (png_uint_16)(alpha)) + 128); \ 1.2671 + (composite) = (png_byte)((temp + (temp >> 8)) >> 8); } 1.2672 + 1.2673 +# define png_composite_16(composite, fg, alpha, bg) \ 1.2674 + { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) \ 1.2675 + * (png_uint_32)(alpha) \ 1.2676 + + (png_uint_32)(bg)*(65535 \ 1.2677 + - (png_uint_32)(alpha)) + 32768); \ 1.2678 + (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); } 1.2679 + 1.2680 +#else /* Standard method using integer division */ 1.2681 + 1.2682 +# define png_composite(composite, fg, alpha, bg) \ 1.2683 + (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) + \ 1.2684 + (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \ 1.2685 + 127) / 255) 1.2686 + 1.2687 +# define png_composite_16(composite, fg, alpha, bg) \ 1.2688 + (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \ 1.2689 + (png_uint_32)(bg)*(png_uint_32)(65535 - (png_uint_32)(alpha)) + \ 1.2690 + 32767) / 65535) 1.2691 +#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */ 1.2692 + 1.2693 +#ifdef PNG_READ_INT_FUNCTIONS_SUPPORTED 1.2694 +PNG_EXPORT(201, png_uint_32, png_get_uint_32, (png_const_bytep buf)); 1.2695 +PNG_EXPORT(202, png_uint_16, png_get_uint_16, (png_const_bytep buf)); 1.2696 +PNG_EXPORT(203, png_int_32, png_get_int_32, (png_const_bytep buf)); 1.2697 +#endif 1.2698 + 1.2699 +PNG_EXPORT(204, png_uint_32, png_get_uint_31, (png_const_structrp png_ptr, 1.2700 + png_const_bytep buf)); 1.2701 +/* No png_get_int_16 -- may be added if there's a real need for it. */ 1.2702 + 1.2703 +/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */ 1.2704 +#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED 1.2705 +PNG_EXPORT(205, void, png_save_uint_32, (png_bytep buf, png_uint_32 i)); 1.2706 +#endif 1.2707 +#ifdef PNG_SAVE_INT_32_SUPPORTED 1.2708 +PNG_EXPORT(206, void, png_save_int_32, (png_bytep buf, png_int_32 i)); 1.2709 +#endif 1.2710 + 1.2711 +/* Place a 16-bit number into a buffer in PNG byte order. 1.2712 + * The parameter is declared unsigned int, not png_uint_16, 1.2713 + * just to avoid potential problems on pre-ANSI C compilers. 1.2714 + */ 1.2715 +#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED 1.2716 +PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i)); 1.2717 +/* No png_save_int_16 -- may be added if there's a real need for it. */ 1.2718 +#endif 1.2719 + 1.2720 +#ifdef PNG_USE_READ_MACROS 1.2721 +/* Inline macros to do direct reads of bytes from the input buffer. 1.2722 + * The png_get_int_32() routine assumes we are using two's complement 1.2723 + * format for negative values, which is almost certainly true. 1.2724 + */ 1.2725 +# define PNG_get_uint_32(buf) \ 1.2726 + (((png_uint_32)(*(buf)) << 24) + \ 1.2727 + ((png_uint_32)(*((buf) + 1)) << 16) + \ 1.2728 + ((png_uint_32)(*((buf) + 2)) << 8) + \ 1.2729 + ((png_uint_32)(*((buf) + 3)))) 1.2730 + 1.2731 + /* From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the 1.2732 + * function) incorrectly returned a value of type png_uint_32. 1.2733 + */ 1.2734 +# define PNG_get_uint_16(buf) \ 1.2735 + ((png_uint_16) \ 1.2736 + (((unsigned int)(*(buf)) << 8) + \ 1.2737 + ((unsigned int)(*((buf) + 1))))) 1.2738 + 1.2739 +# define PNG_get_int_32(buf) \ 1.2740 + ((png_int_32)((*(buf) & 0x80) \ 1.2741 + ? -((png_int_32)((png_get_uint_32(buf) ^ 0xffffffffL) + 1)) \ 1.2742 + : (png_int_32)png_get_uint_32(buf))) 1.2743 + 1.2744 + /* If PNG_PREFIX is defined the same thing as below happens in pnglibconf.h, 1.2745 + * but defining a macro name prefixed with PNG_PREFIX. 1.2746 + */ 1.2747 +# ifndef PNG_PREFIX 1.2748 +# define png_get_uint_32(buf) PNG_get_uint_32(buf) 1.2749 +# define png_get_uint_16(buf) PNG_get_uint_16(buf) 1.2750 +# define png_get_int_32(buf) PNG_get_int_32(buf) 1.2751 +# endif 1.2752 +#else 1.2753 +# ifdef PNG_PREFIX 1.2754 + /* No macros; revert to the (redefined) function */ 1.2755 +# define PNG_get_uint_32 (png_get_uint_32) 1.2756 +# define PNG_get_uint_16 (png_get_uint_16) 1.2757 +# define PNG_get_int_32 (png_get_int_32) 1.2758 +# endif 1.2759 +#endif 1.2760 + 1.2761 +/******************************************************************************* 1.2762 + * SIMPLIFIED API 1.2763 + ******************************************************************************* 1.2764 + * 1.2765 + * Please read the documentation in libpng-manual.txt (TODO: write said 1.2766 + * documentation) if you don't understand what follows. 1.2767 + * 1.2768 + * The simplified API hides the details of both libpng and the PNG file format 1.2769 + * itself. It allows PNG files to be read into a very limited number of 1.2770 + * in-memory bitmap formats or to be written from the same formats. If these 1.2771 + * formats do not accomodate your needs then you can, and should, use the more 1.2772 + * sophisticated APIs above - these support a wide variety of in-memory formats 1.2773 + * and a wide variety of sophisticated transformations to those formats as well 1.2774 + * as a wide variety of APIs to manipulate ancillary information. 1.2775 + * 1.2776 + * To read a PNG file using the simplified API: 1.2777 + * 1.2778 + * 1) Declare a 'png_image' structure (see below) on the stack and set the 1.2779 + * version field to PNG_IMAGE_VERSION. 1.2780 + * 2) Call the appropriate png_image_begin_read... function. 1.2781 + * 3) Set the png_image 'format' member to the required sample format. 1.2782 + * 4) Allocate a buffer for the image and, if required, the color-map. 1.2783 + * 5) Call png_image_finish_read to read the image and, if required, the 1.2784 + * color-map into your buffers. 1.2785 + * 1.2786 + * There are no restrictions on the format of the PNG input itself; all valid 1.2787 + * color types, bit depths, and interlace methods are acceptable, and the 1.2788 + * input image is transformed as necessary to the requested in-memory format 1.2789 + * during the png_image_finish_read() step. The only caveat is that if you 1.2790 + * request a color-mapped image from a PNG that is full-color or makes 1.2791 + * complex use of an alpha channel the transformation is extremely lossy and the 1.2792 + * result may look terrible. 1.2793 + * 1.2794 + * To write a PNG file using the simplified API: 1.2795 + * 1.2796 + * 1) Declare a 'png_image' structure on the stack and memset() it to all zero. 1.2797 + * 2) Initialize the members of the structure that describe the image, setting 1.2798 + * the 'format' member to the format of the image samples. 1.2799 + * 3) Call the appropriate png_image_write... function with a pointer to the 1.2800 + * image and, if necessary, the color-map to write the PNG data. 1.2801 + * 1.2802 + * png_image is a structure that describes the in-memory format of an image 1.2803 + * when it is being read or defines the in-memory format of an image that you 1.2804 + * need to write: 1.2805 + */ 1.2806 +#define PNG_IMAGE_VERSION 1 1.2807 + 1.2808 +typedef struct png_control *png_controlp; 1.2809 +typedef struct 1.2810 +{ 1.2811 + png_controlp opaque; /* Initialize to NULL, free with png_image_free */ 1.2812 + png_uint_32 version; /* Set to PNG_IMAGE_VERSION */ 1.2813 + png_uint_32 width; /* Image width in pixels (columns) */ 1.2814 + png_uint_32 height; /* Image height in pixels (rows) */ 1.2815 + png_uint_32 format; /* Image format as defined below */ 1.2816 + png_uint_32 flags; /* A bit mask containing informational flags */ 1.2817 + png_uint_32 colormap_entries; 1.2818 + /* Number of entries in the color-map */ 1.2819 + 1.2820 + /* In the event of an error or warning the following field will be set to a 1.2821 + * non-zero value and the 'message' field will contain a '\0' terminated 1.2822 + * string with the libpng error or warning message. If both warnings and 1.2823 + * an error were encountered, only the error is recorded. If there 1.2824 + * are multiple warnings, only the first one is recorded. 1.2825 + * 1.2826 + * The upper 30 bits of this value are reserved, the low two bits contain 1.2827 + * a value as follows: 1.2828 + */ 1.2829 +# define PNG_IMAGE_WARNING 1 1.2830 +# define PNG_IMAGE_ERROR 2 1.2831 + /* 1.2832 + * The result is a two bit code such that a value more than 1 indicates 1.2833 + * a failure in the API just called: 1.2834 + * 1.2835 + * 0 - no warning or error 1.2836 + * 1 - warning 1.2837 + * 2 - error 1.2838 + * 3 - error preceded by warning 1.2839 + */ 1.2840 +# define PNG_IMAGE_FAILED(png_cntrl) ((((png_cntrl).warning_or_error)&0x03)>1) 1.2841 + 1.2842 + png_uint_32 warning_or_error; 1.2843 + 1.2844 + char message[64]; 1.2845 +} png_image, *png_imagep; 1.2846 + 1.2847 +/* The samples of the image have one to four channels whose components have 1.2848 + * original values in the range 0 to 1.0: 1.2849 + * 1.2850 + * 1: A single gray or luminance channel (G). 1.2851 + * 2: A gray/luminance channel and an alpha channel (GA). 1.2852 + * 3: Three red, green, blue color channels (RGB). 1.2853 + * 4: Three color channels and an alpha channel (RGBA). 1.2854 + * 1.2855 + * The components are encoded in one of two ways: 1.2856 + * 1.2857 + * a) As a small integer, value 0..255, contained in a single byte. For the 1.2858 + * alpha channel the original value is simply value/255. For the color or 1.2859 + * luminance channels the value is encoded according to the sRGB specification 1.2860 + * and matches the 8-bit format expected by typical display devices. 1.2861 + * 1.2862 + * The color/gray channels are not scaled (pre-multiplied) by the alpha 1.2863 + * channel and are suitable for passing to color management software. 1.2864 + * 1.2865 + * b) As a value in the range 0..65535, contained in a 2-byte integer. All 1.2866 + * channels can be converted to the original value by dividing by 65535; all 1.2867 + * channels are linear. Color channels use the RGB encoding (RGB end-points) of 1.2868 + * the sRGB specification. This encoding is identified by the 1.2869 + * PNG_FORMAT_FLAG_LINEAR flag below. 1.2870 + * 1.2871 + * When the simplified API needs to convert between sRGB and linear colorspaces, 1.2872 + * the actual sRGB transfer curve defined in the sRGB specification (see the 1.2873 + * article at http://en.wikipedia.org/wiki/SRGB) is used, not the gamma=1/2.2 1.2874 + * approximation used elsewhere in libpng. 1.2875 + * 1.2876 + * When an alpha channel is present it is expected to denote pixel coverage 1.2877 + * of the color or luminance channels and is returned as an associated alpha 1.2878 + * channel: the color/gray channels are scaled (pre-multiplied) by the alpha 1.2879 + * value. 1.2880 + * 1.2881 + * The samples are either contained directly in the image data, between 1 and 8 1.2882 + * bytes per pixel according to the encoding, or are held in a color-map indexed 1.2883 + * by bytes in the image data. In the case of a color-map the color-map entries 1.2884 + * are individual samples, encoded as above, and the image data has one byte per 1.2885 + * pixel to select the relevant sample from the color-map. 1.2886 + */ 1.2887 + 1.2888 +/* PNG_FORMAT_* 1.2889 + * 1.2890 + * #defines to be used in png_image::format. Each #define identifies a 1.2891 + * particular layout of sample data and, if present, alpha values. There are 1.2892 + * separate defines for each of the two component encodings. 1.2893 + * 1.2894 + * A format is built up using single bit flag values. All combinations are 1.2895 + * valid. Formats can be built up from the flag values or you can use one of 1.2896 + * the predefined values below. When testing formats always use the FORMAT_FLAG 1.2897 + * macros to test for individual features - future versions of the library may 1.2898 + * add new flags. 1.2899 + * 1.2900 + * When reading or writing color-mapped images the format should be set to the 1.2901 + * format of the entries in the color-map then png_image_{read,write}_colormap 1.2902 + * called to read or write the color-map and set the format correctly for the 1.2903 + * image data. Do not set the PNG_FORMAT_FLAG_COLORMAP bit directly! 1.2904 + * 1.2905 + * NOTE: libpng can be built with particular features disabled, if you see 1.2906 + * compiler errors because the definition of one of the following flags has been 1.2907 + * compiled out it is because libpng does not have the required support. It is 1.2908 + * possible, however, for the libpng configuration to enable the format on just 1.2909 + * read or just write; in that case you may see an error at run time. You can 1.2910 + * guard against this by checking for the definition of the appropriate 1.2911 + * "_SUPPORTED" macro, one of: 1.2912 + * 1.2913 + * PNG_SIMPLIFIED_{READ,WRITE}_{BGR,AFIRST}_SUPPORTED 1.2914 + */ 1.2915 +#define PNG_FORMAT_FLAG_ALPHA 0x01U /* format with an alpha channel */ 1.2916 +#define PNG_FORMAT_FLAG_COLOR 0x02U /* color format: otherwise grayscale */ 1.2917 +#define PNG_FORMAT_FLAG_LINEAR 0x04U /* 2 byte channels else 1 byte */ 1.2918 +#define PNG_FORMAT_FLAG_COLORMAP 0x08U /* image data is color-mapped */ 1.2919 + 1.2920 +#ifdef PNG_FORMAT_BGR_SUPPORTED 1.2921 +# define PNG_FORMAT_FLAG_BGR 0x10U /* BGR colors, else order is RGB */ 1.2922 +#endif 1.2923 + 1.2924 +#ifdef PNG_FORMAT_AFIRST_SUPPORTED 1.2925 +# define PNG_FORMAT_FLAG_AFIRST 0x20U /* alpha channel comes first */ 1.2926 +#endif 1.2927 + 1.2928 +/* Commonly used formats have predefined macros. 1.2929 + * 1.2930 + * First the single byte (sRGB) formats: 1.2931 + */ 1.2932 +#define PNG_FORMAT_GRAY 0 1.2933 +#define PNG_FORMAT_GA PNG_FORMAT_FLAG_ALPHA 1.2934 +#define PNG_FORMAT_AG (PNG_FORMAT_GA|PNG_FORMAT_FLAG_AFIRST) 1.2935 +#define PNG_FORMAT_RGB PNG_FORMAT_FLAG_COLOR 1.2936 +#define PNG_FORMAT_BGR (PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_BGR) 1.2937 +#define PNG_FORMAT_RGBA (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_ALPHA) 1.2938 +#define PNG_FORMAT_ARGB (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_AFIRST) 1.2939 +#define PNG_FORMAT_BGRA (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_ALPHA) 1.2940 +#define PNG_FORMAT_ABGR (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_AFIRST) 1.2941 + 1.2942 +/* Then the linear 2-byte formats. When naming these "Y" is used to 1.2943 + * indicate a luminance (gray) channel. 1.2944 + */ 1.2945 +#define PNG_FORMAT_LINEAR_Y PNG_FORMAT_FLAG_LINEAR 1.2946 +#define PNG_FORMAT_LINEAR_Y_ALPHA (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_ALPHA) 1.2947 +#define PNG_FORMAT_LINEAR_RGB (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR) 1.2948 +#define PNG_FORMAT_LINEAR_RGB_ALPHA \ 1.2949 + (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA) 1.2950 + 1.2951 +/* With color-mapped formats the image data is one byte for each pixel, the byte 1.2952 + * is an index into the color-map which is formatted as above. To obtain a 1.2953 + * color-mapped format it is sufficient just to add the PNG_FOMAT_FLAG_COLORMAP 1.2954 + * to one of the above definitions, or you can use one of the definitions below. 1.2955 + */ 1.2956 +#define PNG_FORMAT_RGB_COLORMAP (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_COLORMAP) 1.2957 +#define PNG_FORMAT_BGR_COLORMAP (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_COLORMAP) 1.2958 +#define PNG_FORMAT_RGBA_COLORMAP (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_COLORMAP) 1.2959 +#define PNG_FORMAT_ARGB_COLORMAP (PNG_FORMAT_ARGB|PNG_FORMAT_FLAG_COLORMAP) 1.2960 +#define PNG_FORMAT_BGRA_COLORMAP (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_COLORMAP) 1.2961 +#define PNG_FORMAT_ABGR_COLORMAP (PNG_FORMAT_ABGR|PNG_FORMAT_FLAG_COLORMAP) 1.2962 + 1.2963 +/* PNG_IMAGE macros 1.2964 + * 1.2965 + * These are convenience macros to derive information from a png_image 1.2966 + * structure. The PNG_IMAGE_SAMPLE_ macros return values appropriate to the 1.2967 + * actual image sample values - either the entries in the color-map or the 1.2968 + * pixels in the image. The PNG_IMAGE_PIXEL_ macros return corresponding values 1.2969 + * for the pixels and will always return 1 for color-mapped formats. The 1.2970 + * remaining macros return information about the rows in the image and the 1.2971 + * complete image. 1.2972 + * 1.2973 + * NOTE: All the macros that take a png_image::format parameter are compile time 1.2974 + * constants if the format parameter is, itself, a constant. Therefore these 1.2975 + * macros can be used in array declarations and case labels where required. 1.2976 + * Similarly the macros are also pre-processor constants (sizeof is not used) so 1.2977 + * they can be used in #if tests. 1.2978 + * 1.2979 + * First the information about the samples. 1.2980 + */ 1.2981 +#define PNG_IMAGE_SAMPLE_CHANNELS(fmt)\ 1.2982 + (((fmt)&(PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA))+1) 1.2983 + /* Return the total number of channels in a given format: 1..4 */ 1.2984 + 1.2985 +#define PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)\ 1.2986 + ((((fmt) & PNG_FORMAT_FLAG_LINEAR) >> 2)+1) 1.2987 + /* Return the size in bytes of a single component of a pixel or color-map 1.2988 + * entry (as appropriate) in the image: 1 or 2. 1.2989 + */ 1.2990 + 1.2991 +#define PNG_IMAGE_SAMPLE_SIZE(fmt)\ 1.2992 + (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)) 1.2993 + /* This is the size of the sample data for one sample. If the image is 1.2994 + * color-mapped it is the size of one color-map entry (and image pixels are 1.2995 + * one byte in size), otherwise it is the size of one image pixel. 1.2996 + */ 1.2997 + 1.2998 +#define PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)\ 1.2999 + (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * 256) 1.3000 + /* The maximum size of the color-map required by the format expressed in a 1.3001 + * count of components. This can be used to compile-time allocate a 1.3002 + * color-map: 1.3003 + * 1.3004 + * png_uint_16 colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)]; 1.3005 + * 1.3006 + * png_byte colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)]; 1.3007 + * 1.3008 + * Alternatively use the PNG_IMAGE_COLORMAP_SIZE macro below to use the 1.3009 + * information from one of the png_image_begin_read_ APIs and dynamically 1.3010 + * allocate the required memory. 1.3011 + */ 1.3012 + 1.3013 +/* Corresponding information about the pixels */ 1.3014 +#define PNG_IMAGE_PIXEL_(test,fmt)\ 1.3015 + (((fmt)&PNG_FORMAT_FLAG_COLORMAP)?1:test(fmt)) 1.3016 + 1.3017 +#define PNG_IMAGE_PIXEL_CHANNELS(fmt)\ 1.3018 + PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_CHANNELS,fmt) 1.3019 + /* The number of separate channels (components) in a pixel; 1 for a 1.3020 + * color-mapped image. 1.3021 + */ 1.3022 + 1.3023 +#define PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)\ 1.3024 + PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_COMPONENT_SIZE,fmt) 1.3025 + /* The size, in bytes, of each component in a pixel; 1 for a color-mapped 1.3026 + * image. 1.3027 + */ 1.3028 + 1.3029 +#define PNG_IMAGE_PIXEL_SIZE(fmt) PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_SIZE,fmt) 1.3030 + /* The size, in bytes, of a complete pixel; 1 for a color-mapped image. */ 1.3031 + 1.3032 +/* Information about the whole row, or whole image */ 1.3033 +#define PNG_IMAGE_ROW_STRIDE(image)\ 1.3034 + (PNG_IMAGE_PIXEL_CHANNELS((image).format) * (image).width) 1.3035 + /* Return the total number of components in a single row of the image; this 1.3036 + * is the minimum 'row stride', the minimum count of components between each 1.3037 + * row. For a color-mapped image this is the minimum number of bytes in a 1.3038 + * row. 1.3039 + */ 1.3040 + 1.3041 +#define PNG_IMAGE_BUFFER_SIZE(image, row_stride)\ 1.3042 + (PNG_IMAGE_PIXEL_COMPONENT_SIZE((image).format)*(image).height*(row_stride)) 1.3043 + /* Return the size, in bytes, of an image buffer given a png_image and a row 1.3044 + * stride - the number of components to leave space for in each row. 1.3045 + */ 1.3046 + 1.3047 +#define PNG_IMAGE_SIZE(image)\ 1.3048 + PNG_IMAGE_BUFFER_SIZE(image, PNG_IMAGE_ROW_STRIDE(image)) 1.3049 + /* Return the size, in bytes, of the image in memory given just a png_image; 1.3050 + * the row stride is the minimum stride required for the image. 1.3051 + */ 1.3052 + 1.3053 +#define PNG_IMAGE_COLORMAP_SIZE(image)\ 1.3054 + (PNG_IMAGE_SAMPLE_SIZE((image).format) * (image).colormap_entries) 1.3055 + /* Return the size, in bytes, of the color-map of this image. If the image 1.3056 + * format is not a color-map format this will return a size sufficient for 1.3057 + * 256 entries in the given format; check PNG_FORMAT_FLAG_COLORMAP if 1.3058 + * you don't want to allocate a color-map in this case. 1.3059 + */ 1.3060 + 1.3061 +/* PNG_IMAGE_FLAG_* 1.3062 + * 1.3063 + * Flags containing additional information about the image are held in the 1.3064 + * 'flags' field of png_image. 1.3065 + */ 1.3066 +#define PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB 0x01 1.3067 + /* This indicates the the RGB values of the in-memory bitmap do not 1.3068 + * correspond to the red, green and blue end-points defined by sRGB. 1.3069 + */ 1.3070 + 1.3071 +#define PNG_IMAGE_FLAG_FAST 0x02 1.3072 + /* On write emphasise speed over compression; the resultant PNG file will be 1.3073 + * larger but will be produced significantly faster, particular for large 1.3074 + * images. Do not use this option for images which will be distributed, only 1.3075 + * used it when producing intermediate files that will be read back in 1.3076 + * repeatedly. For a typical 24-bit image the option will double the read 1.3077 + * speed at the cost of increasing the image size by 25%, however for many 1.3078 + * more compressible images the PNG file can be 10 times larger with only a 1.3079 + * slight speed gain. 1.3080 + */ 1.3081 + 1.3082 +#define PNG_IMAGE_FLAG_16BIT_sRGB 0x04 1.3083 + /* On read if the image is a 16-bit per component image and there is no gAMA 1.3084 + * or sRGB chunk assume that the components are sRGB encoded. Notice that 1.3085 + * images output by the simplified API always have gamma information; setting 1.3086 + * this flag only affects the interpretation of 16-bit images from an 1.3087 + * external source. It is recommended that the application expose this flag 1.3088 + * to the user; the user can normally easily recognize the difference between 1.3089 + * linear and sRGB encoding. This flag has no effect on write - the data 1.3090 + * passed to the write APIs must have the correct encoding (as defined 1.3091 + * above.) 1.3092 + * 1.3093 + * If the flag is not set (the default) input 16-bit per component data is 1.3094 + * assumed to be linear. 1.3095 + * 1.3096 + * NOTE: the flag can only be set after the png_image_begin_read_ call, 1.3097 + * because that call initializes the 'flags' field. 1.3098 + */ 1.3099 + 1.3100 +#ifdef PNG_SIMPLIFIED_READ_SUPPORTED 1.3101 +/* READ APIs 1.3102 + * --------- 1.3103 + * 1.3104 + * The png_image passed to the read APIs must have been initialized by setting 1.3105 + * the png_controlp field 'opaque' to NULL (or, safer, memset the whole thing.) 1.3106 + */ 1.3107 +#ifdef PNG_STDIO_SUPPORTED 1.3108 +PNG_EXPORT(234, int, png_image_begin_read_from_file, (png_imagep image, 1.3109 + const char *file_name)); 1.3110 + /* The named file is opened for read and the image header is filled in 1.3111 + * from the PNG header in the file. 1.3112 + */ 1.3113 + 1.3114 +PNG_EXPORT(235, int, png_image_begin_read_from_stdio, (png_imagep image, 1.3115 + FILE* file)); 1.3116 + /* The PNG header is read from the stdio FILE object. */ 1.3117 +#endif /* PNG_STDIO_SUPPORTED */ 1.3118 + 1.3119 +PNG_EXPORT(236, int, png_image_begin_read_from_memory, (png_imagep image, 1.3120 + png_const_voidp memory, png_size_t size)); 1.3121 + /* The PNG header is read from the given memory buffer. */ 1.3122 + 1.3123 +PNG_EXPORT(237, int, png_image_finish_read, (png_imagep image, 1.3124 + png_const_colorp background, void *buffer, png_int_32 row_stride, 1.3125 + void *colormap)); 1.3126 + /* Finish reading the image into the supplied buffer and clean up the 1.3127 + * png_image structure. 1.3128 + * 1.3129 + * row_stride is the step, in byte or 2-byte units as appropriate, 1.3130 + * between adjacent rows. A positive stride indicates that the top-most row 1.3131 + * is first in the buffer - the normal top-down arrangement. A negative 1.3132 + * stride indicates that the bottom-most row is first in the buffer. 1.3133 + * 1.3134 + * background need only be supplied if an alpha channel must be removed from 1.3135 + * a png_byte format and the removal is to be done by compositing on a solid 1.3136 + * color; otherwise it may be NULL and any composition will be done directly 1.3137 + * onto the buffer. The value is an sRGB color to use for the background, 1.3138 + * for grayscale output the green channel is used. 1.3139 + * 1.3140 + * background must be supplied when an alpha channel must be removed from a 1.3141 + * single byte color-mapped output format, in other words if: 1.3142 + * 1.3143 + * 1) The original format from png_image_begin_read_from_* had 1.3144 + * PNG_FORMAT_FLAG_ALPHA set. 1.3145 + * 2) The format set by the application does not. 1.3146 + * 3) The format set by the application has PNG_FORMAT_FLAG_COLORMAP set and 1.3147 + * PNG_FORMAT_FLAG_LINEAR *not* set. 1.3148 + * 1.3149 + * For linear output removing the alpha channel is always done by compositing 1.3150 + * on black and background is ignored. 1.3151 + * 1.3152 + * colormap must be supplied when PNG_FORMAT_FLAG_COLORMAP is set. It must 1.3153 + * be at least the size (in bytes) returned by PNG_IMAGE_COLORMAP_SIZE. 1.3154 + * image->colormap_entries will be updated to the actual number of entries 1.3155 + * written to the colormap; this may be less than the original value. 1.3156 + */ 1.3157 + 1.3158 +PNG_EXPORT(238, void, png_image_free, (png_imagep image)); 1.3159 + /* Free any data allocated by libpng in image->opaque, setting the pointer to 1.3160 + * NULL. May be called at any time after the structure is initialized. 1.3161 + */ 1.3162 +#endif /* PNG_SIMPLIFIED_READ_SUPPORTED */ 1.3163 + 1.3164 +#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED 1.3165 +#ifdef PNG_STDIO_SUPPORTED 1.3166 +/* WRITE APIS 1.3167 + * ---------- 1.3168 + * For write you must initialize a png_image structure to describe the image to 1.3169 + * be written. To do this use memset to set the whole structure to 0 then 1.3170 + * initialize fields describing your image. 1.3171 + * 1.3172 + * version: must be set to PNG_IMAGE_VERSION 1.3173 + * opaque: must be initialized to NULL 1.3174 + * width: image width in pixels 1.3175 + * height: image height in rows 1.3176 + * format: the format of the data (image and color-map) you wish to write 1.3177 + * flags: set to 0 unless one of the defined flags applies; set 1.3178 + * PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB for color format images where the RGB 1.3179 + * values do not correspond to the colors in sRGB. 1.3180 + * colormap_entries: set to the number of entries in the color-map (0 to 256) 1.3181 + */ 1.3182 +PNG_EXPORT(239, int, png_image_write_to_file, (png_imagep image, 1.3183 + const char *file, int convert_to_8bit, const void *buffer, 1.3184 + png_int_32 row_stride, const void *colormap)); 1.3185 + /* Write the image to the named file. */ 1.3186 + 1.3187 +PNG_EXPORT(240, int, png_image_write_to_stdio, (png_imagep image, FILE *file, 1.3188 + int convert_to_8_bit, const void *buffer, png_int_32 row_stride, 1.3189 + const void *colormap)); 1.3190 + /* Write the image to the given (FILE*). */ 1.3191 + 1.3192 +/* With both write APIs if image is in one of the linear formats with 16-bit 1.3193 + * data then setting convert_to_8_bit will cause the output to be an 8-bit PNG 1.3194 + * gamma encoded according to the sRGB specification, otherwise a 16-bit linear 1.3195 + * encoded PNG file is written. 1.3196 + * 1.3197 + * With color-mapped data formats the colormap parameter point to a color-map 1.3198 + * with at least image->colormap_entries encoded in the specified format. If 1.3199 + * the format is linear the written PNG color-map will be converted to sRGB 1.3200 + * regardless of the convert_to_8_bit flag. 1.3201 + * 1.3202 + * With all APIs row_stride is handled as in the read APIs - it is the spacing 1.3203 + * from one row to the next in component sized units (1 or 2 bytes) and if 1.3204 + * negative indicates a bottom-up row layout in the buffer. 1.3205 + * 1.3206 + * Note that the write API does not support interlacing or sub-8-bit pixels. 1.3207 + */ 1.3208 +#endif /* PNG_STDIO_SUPPORTED */ 1.3209 +#endif /* PNG_SIMPLIFIED_WRITE_SUPPORTED */ 1.3210 +/******************************************************************************* 1.3211 + * END OF SIMPLIFIED API 1.3212 + ******************************************************************************/ 1.3213 + 1.3214 +#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED 1.3215 +PNG_EXPORT(242, void, png_set_check_for_invalid_index, 1.3216 + (png_structrp png_ptr, int allowed)); 1.3217 +# ifdef PNG_GET_PALETTE_MAX_SUPPORTED 1.3218 +PNG_EXPORT(243, int, png_get_palette_max, (png_const_structp png_ptr, 1.3219 + png_const_infop info_ptr)); 1.3220 +# endif 1.3221 +#endif /* CHECK_FOR_INVALID_INDEX */ 1.3222 + 1.3223 +/******************************************************************************* 1.3224 + * IMPLEMENTATION OPTIONS 1.3225 + ******************************************************************************* 1.3226 + * 1.3227 + * Support for arbitrary implementation-specific optimizations. The API allows 1.3228 + * particular options to be turned on or off. 'Option' is the number of the 1.3229 + * option and 'onoff' is 0 (off) or non-0 (on). The value returned is given 1.3230 + * by the PNG_OPTION_ defines below. 1.3231 + * 1.3232 + * HARDWARE: normally hardware capabilites, such as the Intel SSE instructions, 1.3233 + * are detected at run time, however sometimes it may be impossible 1.3234 + * to do this in user mode, in which case it is necessary to discover 1.3235 + * the capabilities in an OS specific way. Such capabilities are 1.3236 + * listed here when libpng has support for them and must be turned 1.3237 + * ON by the application if present. 1.3238 + * 1.3239 + * SOFTWARE: sometimes software optimizations actually result in performance 1.3240 + * decrease on some architectures or systems, or with some sets of 1.3241 + * PNG images. 'Software' options allow such optimizations to be 1.3242 + * selected at run time. 1.3243 + */ 1.3244 +#ifdef PNG_SET_OPTION_SUPPORTED 1.3245 +#ifdef PNG_ARM_NEON_API_SUPPORTED 1.3246 +# define PNG_ARM_NEON 0 /* HARDWARE: ARM Neon SIMD instructions supported */ 1.3247 +#endif 1.3248 +#define PNG_MAXIMUM_INFLATE_WINDOW 2 /* SOFTWARE: force maximum window */ 1.3249 +#define PNG_OPTION_NEXT 4 /* Next option - numbers must be even */ 1.3250 + 1.3251 +/* Return values: NOTE: there are four values and 'off' is *not* zero */ 1.3252 +#define PNG_OPTION_UNSET 0 /* Unset - defaults to off */ 1.3253 +#define PNG_OPTION_INVALID 1 /* Option number out of range */ 1.3254 +#define PNG_OPTION_OFF 2 1.3255 +#define PNG_OPTION_ON 3 1.3256 + 1.3257 +PNG_EXPORT(244, int, png_set_option, (png_structrp png_ptr, int option, 1.3258 + int onoff)); 1.3259 +#endif 1.3260 + 1.3261 +/******************************************************************************* 1.3262 + * END OF HARDWARE OPTIONS 1.3263 + ******************************************************************************/ 1.3264 + 1.3265 +#ifdef PNG_APNG_SUPPORTED 1.3266 +PNG_EXPORT(245, png_uint_32, png_get_acTL, (png_structp png_ptr, 1.3267 + png_infop info_ptr, png_uint_32 *num_frames, png_uint_32 *num_plays)); 1.3268 + 1.3269 +PNG_EXPORT(246, png_uint_32, png_set_acTL, (png_structp png_ptr, 1.3270 + png_infop info_ptr, png_uint_32 num_frames, png_uint_32 num_plays)); 1.3271 + 1.3272 +PNG_EXPORT(247, png_uint_32, png_get_num_frames, (png_structp png_ptr, 1.3273 + png_infop info_ptr)); 1.3274 + 1.3275 +PNG_EXPORT(248, png_uint_32, png_get_num_plays, (png_structp png_ptr, 1.3276 + png_infop info_ptr)); 1.3277 + 1.3278 +PNG_EXPORT(249, png_uint_32, png_get_next_frame_fcTL, 1.3279 + (png_structp png_ptr, png_infop info_ptr, png_uint_32 *width, 1.3280 + png_uint_32 *height, png_uint_32 *x_offset, png_uint_32 *y_offset, 1.3281 + png_uint_16 *delay_num, png_uint_16 *delay_den, png_byte *dispose_op, 1.3282 + png_byte *blend_op)); 1.3283 + 1.3284 +PNG_EXPORT(250, png_uint_32, png_set_next_frame_fcTL, 1.3285 + (png_structp png_ptr, png_infop info_ptr, png_uint_32 width, 1.3286 + png_uint_32 height, png_uint_32 x_offset, png_uint_32 y_offset, 1.3287 + png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op, 1.3288 + png_byte blend_op)); 1.3289 + 1.3290 +PNG_EXPORT(251, png_uint_32, png_get_next_frame_width, 1.3291 + (png_structp png_ptr, png_infop info_ptr)); 1.3292 +PNG_EXPORT(252, png_uint_32, png_get_next_frame_height, 1.3293 + (png_structp png_ptr, png_infop info_ptr)); 1.3294 +PNG_EXPORT(253, png_uint_32, png_get_next_frame_x_offset, 1.3295 + (png_structp png_ptr, png_infop info_ptr)); 1.3296 +PNG_EXPORT(254, png_uint_32, png_get_next_frame_y_offset, 1.3297 + (png_structp png_ptr, png_infop info_ptr)); 1.3298 +PNG_EXPORT(255, png_uint_16, png_get_next_frame_delay_num, 1.3299 + (png_structp png_ptr, png_infop info_ptr)); 1.3300 +PNG_EXPORT(256, png_uint_16, png_get_next_frame_delay_den, 1.3301 + (png_structp png_ptr, png_infop info_ptr)); 1.3302 +PNG_EXPORT(257, png_byte, png_get_next_frame_dispose_op, 1.3303 + (png_structp png_ptr, png_infop info_ptr)); 1.3304 +PNG_EXPORT(258, png_byte, png_get_next_frame_blend_op, 1.3305 + (png_structp png_ptr, png_infop info_ptr)); 1.3306 +PNG_EXPORT(259, png_byte, png_get_first_frame_is_hidden, 1.3307 + (png_structp png_ptr, png_infop info_ptr)); 1.3308 +PNG_EXPORT(260, png_uint_32, png_set_first_frame_is_hidden, 1.3309 + (png_structp png_ptr, png_infop info_ptr, png_byte is_hidden)); 1.3310 + 1.3311 +#ifdef PNG_READ_APNG_SUPPORTED 1.3312 +PNG_EXPORT(261, void, png_read_frame_head, (png_structp png_ptr, 1.3313 + png_infop info_ptr)); 1.3314 +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED 1.3315 +PNG_EXPORT(262, void, png_set_progressive_frame_fn, (png_structp png_ptr, 1.3316 + png_progressive_frame_ptr frame_info_fn, 1.3317 + png_progressive_frame_ptr frame_end_fn)); 1.3318 +#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ 1.3319 +#endif /* PNG_READ_APNG_SUPPORTED */ 1.3320 + 1.3321 +#ifdef PNG_WRITE_APNG_SUPPORTED 1.3322 +PNG_EXPORT(263, void, png_write_frame_head, (png_structp png_ptr, 1.3323 + png_infop info_ptr, png_bytepp row_pointers, 1.3324 + png_uint_32 width, png_uint_32 height, 1.3325 + png_uint_32 x_offset, png_uint_32 y_offset, 1.3326 + png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op, 1.3327 + png_byte blend_op)); 1.3328 + 1.3329 +PNG_EXPORT(264, void, png_write_frame_tail, (png_structp png_ptr, 1.3330 + png_infop info_ptr)); 1.3331 +#endif /* PNG_WRITE_APNG_SUPPORTED */ 1.3332 +#endif /* PNG_APNG_SUPPORTED */ 1.3333 + 1.3334 +/* Maintainer: Put new public prototypes here ^, in libpng.3, and project 1.3335 + * defs, scripts/pnglibconf.h, and scripts/pnglibconf.h.prebuilt 1.3336 + */ 1.3337 + 1.3338 +/* The last ordinal number (this is the *last* one already used; the next 1.3339 + * one to use is one more than this.) Maintainer, remember to add an entry to 1.3340 + * scripts/symbols.def as well. 1.3341 + */ 1.3342 +#ifdef PNG_EXPORT_LAST_ORDINAL 1.3343 +#ifdef PNG_APNG_SUPPORTED 1.3344 + PNG_EXPORT_LAST_ORDINAL(264); 1.3345 +#else 1.3346 + PNG_EXPORT_LAST_ORDINAL(244); 1.3347 +#endif /* PNG_APNG_SUPPORTED */ 1.3348 +#endif 1.3349 + 1.3350 +#ifdef __cplusplus 1.3351 +} 1.3352 +#endif 1.3353 + 1.3354 +#endif /* PNG_VERSION_INFO_ONLY */ 1.3355 +/* Do not put anything past this line */ 1.3356 +#endif /* PNG_H */