/src/FreeImage/Source/LibPNG/png.h

https://bitbucket.org/cabalistic/ogredeps/ · C++ Header · 2658 lines · 1166 code · 289 blank · 1203 comment · 13 complexity · f5bf058870b152aa78c02c215e9ad341 MD5 · raw file

Large files are truncated click here to view the full file

  1. /* png.h - header file for PNG reference library
  2. *
  3. * libpng version 1.5.9 - February 18, 2012
  4. * Copyright (c) 1998-2012 Glenn Randers-Pehrson
  5. * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
  6. * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
  7. *
  8. * This code is released under the libpng license (See LICENSE, below)
  9. *
  10. * Authors and maintainers:
  11. * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
  12. * libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
  13. * libpng versions 0.97, January 1998, through 1.5.9 - February 18, 2012: Glenn
  14. * See also "Contributing Authors", below.
  15. *
  16. * Note about libpng version numbers:
  17. *
  18. * Due to various miscommunications, unforeseen code incompatibilities
  19. * and occasional factors outside the authors' control, version numbering
  20. * on the library has not always been consistent and straightforward.
  21. * The following table summarizes matters since version 0.89c, which was
  22. * the first widely used release:
  23. *
  24. * source png.h png.h shared-lib
  25. * version string int version
  26. * ------- ------ ----- ----------
  27. * 0.89c "1.0 beta 3" 0.89 89 1.0.89
  28. * 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90]
  29. * 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95]
  30. * 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96]
  31. * 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97]
  32. * 0.97c 0.97 97 2.0.97
  33. * 0.98 0.98 98 2.0.98
  34. * 0.99 0.99 98 2.0.99
  35. * 0.99a-m 0.99 99 2.0.99
  36. * 1.00 1.00 100 2.1.0 [100 should be 10000]
  37. * 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000]
  38. * 1.0.1 png.h string is 10001 2.1.0
  39. * 1.0.1a-e identical to the 10002 from here on, the shared library
  40. * 1.0.2 source version) 10002 is 2.V where V is the source code
  41. * 1.0.2a-b 10003 version, except as noted.
  42. * 1.0.3 10003
  43. * 1.0.3a-d 10004
  44. * 1.0.4 10004
  45. * 1.0.4a-f 10005
  46. * 1.0.5 (+ 2 patches) 10005
  47. * 1.0.5a-d 10006
  48. * 1.0.5e-r 10100 (not source compatible)
  49. * 1.0.5s-v 10006 (not binary compatible)
  50. * 1.0.6 (+ 3 patches) 10006 (still binary incompatible)
  51. * 1.0.6d-f 10007 (still binary incompatible)
  52. * 1.0.6g 10007
  53. * 1.0.6h 10007 10.6h (testing xy.z so-numbering)
  54. * 1.0.6i 10007 10.6i
  55. * 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0)
  56. * 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible)
  57. * 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible)
  58. * 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible)
  59. * 1.0.7 1 10007 (still compatible)
  60. * 1.0.8beta1-4 1 10008 2.1.0.8beta1-4
  61. * 1.0.8rc1 1 10008 2.1.0.8rc1
  62. * 1.0.8 1 10008 2.1.0.8
  63. * 1.0.9beta1-6 1 10009 2.1.0.9beta1-6
  64. * 1.0.9rc1 1 10009 2.1.0.9rc1
  65. * 1.0.9beta7-10 1 10009 2.1.0.9beta7-10
  66. * 1.0.9rc2 1 10009 2.1.0.9rc2
  67. * 1.0.9 1 10009 2.1.0.9
  68. * 1.0.10beta1 1 10010 2.1.0.10beta1
  69. * 1.0.10rc1 1 10010 2.1.0.10rc1
  70. * 1.0.10 1 10010 2.1.0.10
  71. * 1.0.11beta1-3 1 10011 2.1.0.11beta1-3
  72. * 1.0.11rc1 1 10011 2.1.0.11rc1
  73. * 1.0.11 1 10011 2.1.0.11
  74. * 1.0.12beta1-2 2 10012 2.1.0.12beta1-2
  75. * 1.0.12rc1 2 10012 2.1.0.12rc1
  76. * 1.0.12 2 10012 2.1.0.12
  77. * 1.1.0a-f - 10100 2.1.1.0a-f (branch abandoned)
  78. * 1.2.0beta1-2 2 10200 2.1.2.0beta1-2
  79. * 1.2.0beta3-5 3 10200 3.1.2.0beta3-5
  80. * 1.2.0rc1 3 10200 3.1.2.0rc1
  81. * 1.2.0 3 10200 3.1.2.0
  82. * 1.2.1beta1-4 3 10201 3.1.2.1beta1-4
  83. * 1.2.1rc1-2 3 10201 3.1.2.1rc1-2
  84. * 1.2.1 3 10201 3.1.2.1
  85. * 1.2.2beta1-6 12 10202 12.so.0.1.2.2beta1-6
  86. * 1.0.13beta1 10 10013 10.so.0.1.0.13beta1
  87. * 1.0.13rc1 10 10013 10.so.0.1.0.13rc1
  88. * 1.2.2rc1 12 10202 12.so.0.1.2.2rc1
  89. * 1.0.13 10 10013 10.so.0.1.0.13
  90. * 1.2.2 12 10202 12.so.0.1.2.2
  91. * 1.2.3rc1-6 12 10203 12.so.0.1.2.3rc1-6
  92. * 1.2.3 12 10203 12.so.0.1.2.3
  93. * 1.2.4beta1-3 13 10204 12.so.0.1.2.4beta1-3
  94. * 1.0.14rc1 13 10014 10.so.0.1.0.14rc1
  95. * 1.2.4rc1 13 10204 12.so.0.1.2.4rc1
  96. * 1.0.14 10 10014 10.so.0.1.0.14
  97. * 1.2.4 13 10204 12.so.0.1.2.4
  98. * 1.2.5beta1-2 13 10205 12.so.0.1.2.5beta1-2
  99. * 1.0.15rc1-3 10 10015 10.so.0.1.0.15rc1-3
  100. * 1.2.5rc1-3 13 10205 12.so.0.1.2.5rc1-3
  101. * 1.0.15 10 10015 10.so.0.1.0.15
  102. * 1.2.5 13 10205 12.so.0.1.2.5
  103. * 1.2.6beta1-4 13 10206 12.so.0.1.2.6beta1-4
  104. * 1.0.16 10 10016 10.so.0.1.0.16
  105. * 1.2.6 13 10206 12.so.0.1.2.6
  106. * 1.2.7beta1-2 13 10207 12.so.0.1.2.7beta1-2
  107. * 1.0.17rc1 10 10017 12.so.0.1.0.17rc1
  108. * 1.2.7rc1 13 10207 12.so.0.1.2.7rc1
  109. * 1.0.17 10 10017 12.so.0.1.0.17
  110. * 1.2.7 13 10207 12.so.0.1.2.7
  111. * 1.2.8beta1-5 13 10208 12.so.0.1.2.8beta1-5
  112. * 1.0.18rc1-5 10 10018 12.so.0.1.0.18rc1-5
  113. * 1.2.8rc1-5 13 10208 12.so.0.1.2.8rc1-5
  114. * 1.0.18 10 10018 12.so.0.1.0.18
  115. * 1.2.8 13 10208 12.so.0.1.2.8
  116. * 1.2.9beta1-3 13 10209 12.so.0.1.2.9beta1-3
  117. * 1.2.9beta4-11 13 10209 12.so.0.9[.0]
  118. * 1.2.9rc1 13 10209 12.so.0.9[.0]
  119. * 1.2.9 13 10209 12.so.0.9[.0]
  120. * 1.2.10beta1-7 13 10210 12.so.0.10[.0]
  121. * 1.2.10rc1-2 13 10210 12.so.0.10[.0]
  122. * 1.2.10 13 10210 12.so.0.10[.0]
  123. * 1.4.0beta1-5 14 10400 14.so.0.0[.0]
  124. * 1.2.11beta1-4 13 10211 12.so.0.11[.0]
  125. * 1.4.0beta7-8 14 10400 14.so.0.0[.0]
  126. * 1.2.11 13 10211 12.so.0.11[.0]
  127. * 1.2.12 13 10212 12.so.0.12[.0]
  128. * 1.4.0beta9-14 14 10400 14.so.0.0[.0]
  129. * 1.2.13 13 10213 12.so.0.13[.0]
  130. * 1.4.0beta15-36 14 10400 14.so.0.0[.0]
  131. * 1.4.0beta37-87 14 10400 14.so.14.0[.0]
  132. * 1.4.0rc01 14 10400 14.so.14.0[.0]
  133. * 1.4.0beta88-109 14 10400 14.so.14.0[.0]
  134. * 1.4.0rc02-08 14 10400 14.so.14.0[.0]
  135. * 1.4.0 14 10400 14.so.14.0[.0]
  136. * 1.4.1beta01-03 14 10401 14.so.14.1[.0]
  137. * 1.4.1rc01 14 10401 14.so.14.1[.0]
  138. * 1.4.1beta04-12 14 10401 14.so.14.1[.0]
  139. * 1.4.1 14 10401 14.so.14.1[.0]
  140. * 1.4.2 14 10402 14.so.14.2[.0]
  141. * 1.4.3 14 10403 14.so.14.3[.0]
  142. * 1.4.4 14 10404 14.so.14.4[.0]
  143. * 1.5.0beta01-58 15 10500 15.so.15.0[.0]
  144. * 1.5.0rc01-07 15 10500 15.so.15.0[.0]
  145. * 1.5.0 15 10500 15.so.15.0[.0]
  146. * 1.5.1beta01-11 15 10501 15.so.15.1[.0]
  147. * 1.5.1rc01-02 15 10501 15.so.15.1[.0]
  148. * 1.5.1 15 10501 15.so.15.1[.0]
  149. * 1.5.2beta01-03 15 10502 15.so.15.2[.0]
  150. * 1.5.2rc01-03 15 10502 15.so.15.2[.0]
  151. * 1.5.2 15 10502 15.so.15.2[.0]
  152. * 1.5.3beta01-10 15 10503 15.so.15.3[.0]
  153. * 1.5.3rc01-02 15 10503 15.so.15.3[.0]
  154. * 1.5.3beta11 15 10503 15.so.15.3[.0]
  155. * 1.5.3 [omitted]
  156. * 1.5.4beta01-08 15 10504 15.so.15.4[.0]
  157. * 1.5.4rc01 15 10504 15.so.15.4[.0]
  158. * 1.5.4 15 10504 15.so.15.4[.0]
  159. * 1.5.5beta01-08 15 10505 15.so.15.5[.0]
  160. * 1.5.5rc01 15 10505 15.so.15.5[.0]
  161. * 1.5.5 15 10505 15.so.15.5[.0]
  162. * 1.5.6beta01-07 15 10506 15.so.15.6[.0]
  163. * 1.5.6rc01-03 15 10506 15.so.15.6[.0]
  164. * 1.5.6 15 10506 15.so.15.6[.0]
  165. * 1.5.7beta01-05 15 10507 15.so.15.7[.0]
  166. * 1.5.7rc01-03 15 10507 15.so.15.7[.0]
  167. * 1.5.7 15 10507 15.so.15.7[.0]
  168. * 1.5.8beta01 15 10508 15.so.15.8[.0]
  169. * 1.5.8rc01 15 10508 15.so.15.8[.0]
  170. * 1.5.8 15 10508 15.so.15.8[.0]
  171. * 1.5.9beta01-02 15 10509 15.so.15.9[.0]
  172. * 1.5.9rc01 15 10509 15.so.15.9[.0]
  173. * 1.5.9 15 10509 15.so.15.9[.0]
  174. *
  175. * Henceforth the source version will match the shared-library major
  176. * and minor numbers; the shared-library major version number will be
  177. * used for changes in backward compatibility, as it is intended. The
  178. * PNG_LIBPNG_VER macro, which is not used within libpng but is available
  179. * for applications, is an unsigned integer of the form xyyzz corresponding
  180. * to the source version x.y.z (leading zeros in y and z). Beta versions
  181. * were given the previous public release number plus a letter, until
  182. * version 1.0.6j; from then on they were given the upcoming public
  183. * release number plus "betaNN" or "rcN".
  184. *
  185. * Binary incompatibility exists only when applications make direct access
  186. * to the info_ptr or png_ptr members through png.h, and the compiled
  187. * application is loaded with a different version of the library.
  188. *
  189. * DLLNUM will change each time there are forward or backward changes
  190. * in binary compatibility (e.g., when a new feature is added).
  191. *
  192. * See libpng-manual.txt or libpng.3 for more information. The PNG
  193. * specification is available as a W3C Recommendation and as an ISO
  194. * Specification, <http://www.w3.org/TR/2003/REC-PNG-20031110/
  195. */
  196. /*
  197. * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
  198. *
  199. * If you modify libpng you may insert additional notices immediately following
  200. * this sentence.
  201. *
  202. * This code is released under the libpng license.
  203. *
  204. * libpng versions 1.2.6, August 15, 2004, through 1.5.9, February 18, 2012, are
  205. * Copyright (c) 2004, 2006-2012 Glenn Randers-Pehrson, and are
  206. * distributed according to the same disclaimer and license as libpng-1.2.5
  207. * with the following individual added to the list of Contributing Authors:
  208. *
  209. * Cosmin Truta
  210. *
  211. * libpng versions 1.0.7, July 1, 2000, through 1.2.5, October 3, 2002, are
  212. * Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
  213. * distributed according to the same disclaimer and license as libpng-1.0.6
  214. * with the following individuals added to the list of Contributing Authors:
  215. *
  216. * Simon-Pierre Cadieux
  217. * Eric S. Raymond
  218. * Gilles Vollant
  219. *
  220. * and with the following additions to the disclaimer:
  221. *
  222. * There is no warranty against interference with your enjoyment of the
  223. * library or against infringement. There is no warranty that our
  224. * efforts or the library will fulfill any of your particular purposes
  225. * or needs. This library is provided with all faults, and the entire
  226. * risk of satisfactory quality, performance, accuracy, and effort is with
  227. * the user.
  228. *
  229. * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
  230. * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson, and are
  231. * distributed according to the same disclaimer and license as libpng-0.96,
  232. * with the following individuals added to the list of Contributing Authors:
  233. *
  234. * Tom Lane
  235. * Glenn Randers-Pehrson
  236. * Willem van Schaik
  237. *
  238. * libpng versions 0.89, June 1996, through 0.96, May 1997, are
  239. * Copyright (c) 1996, 1997 Andreas Dilger
  240. * Distributed according to the same disclaimer and license as libpng-0.88,
  241. * with the following individuals added to the list of Contributing Authors:
  242. *
  243. * John Bowler
  244. * Kevin Bracey
  245. * Sam Bushell
  246. * Magnus Holmgren
  247. * Greg Roelofs
  248. * Tom Tanner
  249. *
  250. * libpng versions 0.5, May 1995, through 0.88, January 1996, are
  251. * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  252. *
  253. * For the purposes of this copyright and license, "Contributing Authors"
  254. * is defined as the following set of individuals:
  255. *
  256. * Andreas Dilger
  257. * Dave Martindale
  258. * Guy Eric Schalnat
  259. * Paul Schmidt
  260. * Tim Wegner
  261. *
  262. * The PNG Reference Library is supplied "AS IS". The Contributing Authors
  263. * and Group 42, Inc. disclaim all warranties, expressed or implied,
  264. * including, without limitation, the warranties of merchantability and of
  265. * fitness for any purpose. The Contributing Authors and Group 42, Inc.
  266. * assume no liability for direct, indirect, incidental, special, exemplary,
  267. * or consequential damages, which may result from the use of the PNG
  268. * Reference Library, even if advised of the possibility of such damage.
  269. *
  270. * Permission is hereby granted to use, copy, modify, and distribute this
  271. * source code, or portions hereof, for any purpose, without fee, subject
  272. * to the following restrictions:
  273. *
  274. * 1. The origin of this source code must not be misrepresented.
  275. *
  276. * 2. Altered versions must be plainly marked as such and must not
  277. * be misrepresented as being the original source.
  278. *
  279. * 3. This Copyright notice may not be removed or altered from
  280. * any source or altered source distribution.
  281. *
  282. * The Contributing Authors and Group 42, Inc. specifically permit, without
  283. * fee, and encourage the use of this source code as a component to
  284. * supporting the PNG file format in commercial products. If you use this
  285. * source code in a product, acknowledgment is not required but would be
  286. * appreciated.
  287. */
  288. /*
  289. * A "png_get_copyright" function is available, for convenient use in "about"
  290. * boxes and the like:
  291. *
  292. * printf("%s", png_get_copyright(NULL));
  293. *
  294. * Also, the PNG logo (in PNG format, of course) is supplied in the
  295. * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
  296. */
  297. /*
  298. * Libpng is OSI Certified Open Source Software. OSI Certified is a
  299. * certification mark of the Open Source Initiative.
  300. */
  301. /*
  302. * The contributing authors would like to thank all those who helped
  303. * with testing, bug fixes, and patience. This wouldn't have been
  304. * possible without all of you.
  305. *
  306. * Thanks to Frank J. T. Wojcik for helping with the documentation.
  307. */
  308. /*
  309. * Y2K compliance in libpng:
  310. * =========================
  311. *
  312. * February 18, 2012
  313. *
  314. * Since the PNG Development group is an ad-hoc body, we can't make
  315. * an official declaration.
  316. *
  317. * This is your unofficial assurance that libpng from version 0.71 and
  318. * upward through 1.5.9 are Y2K compliant. It is my belief that
  319. * earlier versions were also Y2K compliant.
  320. *
  321. * Libpng only has two year fields. One is a 2-byte unsigned integer
  322. * that will hold years up to 65535. The other holds the date in text
  323. * format, and will hold years up to 9999.
  324. *
  325. * The integer is
  326. * "png_uint_16 year" in png_time_struct.
  327. *
  328. * The string is
  329. * "png_char time_buffer" in png_struct
  330. *
  331. * There are seven time-related functions:
  332. * png.c: png_convert_to_rfc_1123() in png.c
  333. * (formerly png_convert_to_rfc_1152() in error)
  334. * png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c
  335. * png_convert_from_time_t() in pngwrite.c
  336. * png_get_tIME() in pngget.c
  337. * png_handle_tIME() in pngrutil.c, called in pngread.c
  338. * png_set_tIME() in pngset.c
  339. * png_write_tIME() in pngwutil.c, called in pngwrite.c
  340. *
  341. * All handle dates properly in a Y2K environment. The
  342. * png_convert_from_time_t() function calls gmtime() to convert from system
  343. * clock time, which returns (year - 1900), which we properly convert to
  344. * the full 4-digit year. There is a possibility that applications using
  345. * libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
  346. * function, or that they are incorrectly passing only a 2-digit year
  347. * instead of "year - 1900" into the png_convert_from_struct_tm() function,
  348. * but this is not under our control. The libpng documentation has always
  349. * stated that it works with 4-digit years, and the APIs have been
  350. * documented as such.
  351. *
  352. * The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned
  353. * integer to hold the year, and can hold years as large as 65535.
  354. *
  355. * zlib, upon which libpng depends, is also Y2K compliant. It contains
  356. * no date-related code.
  357. *
  358. * Glenn Randers-Pehrson
  359. * libpng maintainer
  360. * PNG Development Group
  361. */
  362. #ifndef PNG_H
  363. #define PNG_H
  364. /* This is not the place to learn how to use libpng. The file libpng-manual.txt
  365. * describes how to use libpng, and the file example.c summarizes it
  366. * with some code on which to build. This file is useful for looking
  367. * at the actual function definitions and structure components.
  368. *
  369. * If you just need to read a PNG file and don't want to read the documentation
  370. * skip to the end of this file and read the section entitled 'simplified API'.
  371. */
  372. /* Version information for png.h - this should match the version in png.c */
  373. #define PNG_LIBPNG_VER_STRING "1.5.9"
  374. #define PNG_HEADER_VERSION_STRING \
  375. " libpng version 1.5.9 - February 18, 2012\n"
  376. #define PNG_LIBPNG_VER_SONUM 15
  377. #define PNG_LIBPNG_VER_DLLNUM 15
  378. /* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
  379. #define PNG_LIBPNG_VER_MAJOR 1
  380. #define PNG_LIBPNG_VER_MINOR 5
  381. #define PNG_LIBPNG_VER_RELEASE 9
  382. /* This should match the numeric part of the final component of
  383. * PNG_LIBPNG_VER_STRING, omitting any leading zero:
  384. */
  385. #define PNG_LIBPNG_VER_BUILD 0
  386. /* Release Status */
  387. #define PNG_LIBPNG_BUILD_ALPHA 1
  388. #define PNG_LIBPNG_BUILD_BETA 2
  389. #define PNG_LIBPNG_BUILD_RC 3
  390. #define PNG_LIBPNG_BUILD_STABLE 4
  391. #define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7
  392. /* Release-Specific Flags */
  393. #define PNG_LIBPNG_BUILD_PATCH 8 /* Can be OR'ed with
  394. PNG_LIBPNG_BUILD_STABLE only */
  395. #define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with
  396. PNG_LIBPNG_BUILD_SPECIAL */
  397. #define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with
  398. PNG_LIBPNG_BUILD_PRIVATE */
  399. #define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_BETA
  400. /* Careful here. At one time, Guy wanted to use 082, but that would be octal.
  401. * We must not include leading zeros.
  402. * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
  403. * version 1.0.0 was mis-numbered 100 instead of 10000). From
  404. * version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release
  405. */
  406. #define PNG_LIBPNG_VER 10509 /* 1.5.9 */
  407. /* Library configuration: these options cannot be changed after
  408. * the library has been built.
  409. */
  410. #ifndef PNGLCONF_H
  411. /* If pnglibconf.h is missing, you can
  412. * copy scripts/pnglibconf.h.prebuilt to pnglibconf.h
  413. */
  414. # include "pnglibconf.h"
  415. #endif
  416. #ifndef PNG_VERSION_INFO_ONLY
  417. # ifndef PNG_BUILDING_SYMBOL_TABLE
  418. /*
  419. * Standard header files (not needed for the version info or while
  420. * building symbol table -- see scripts/pnglibconf.dfa)
  421. */
  422. # ifdef PNG_SETJMP_SUPPORTED
  423. # include <setjmp.h>
  424. # endif
  425. /* Need the time information for converting tIME chunks, it
  426. * defines struct tm:
  427. */
  428. # ifdef PNG_CONVERT_tIME_SUPPORTED
  429. /* "time.h" functions are not supported on all operating systems */
  430. # include <time.h>
  431. # endif
  432. # endif
  433. /* Machine specific configuration. */
  434. # include "pngconf.h"
  435. #endif
  436. /*
  437. * Added at libpng-1.2.8
  438. *
  439. * Ref MSDN: Private as priority over Special
  440. * VS_FF_PRIVATEBUILD File *was not* built using standard release
  441. * procedures. If this value is given, the StringFileInfo block must
  442. * contain a PrivateBuild string.
  443. *
  444. * VS_FF_SPECIALBUILD File *was* built by the original company using
  445. * standard release procedures but is a variation of the standard
  446. * file of the same version number. If this value is given, the
  447. * StringFileInfo block must contain a SpecialBuild string.
  448. */
  449. #ifdef PNG_USER_PRIVATEBUILD /* From pnglibconf.h */
  450. # define PNG_LIBPNG_BUILD_TYPE \
  451. (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE)
  452. #else
  453. # ifdef PNG_LIBPNG_SPECIALBUILD
  454. # define PNG_LIBPNG_BUILD_TYPE \
  455. (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL)
  456. # else
  457. # define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE)
  458. # endif
  459. #endif
  460. #ifndef PNG_VERSION_INFO_ONLY
  461. /* Inhibit C++ name-mangling for libpng functions but not for system calls. */
  462. #ifdef __cplusplus
  463. extern "C" {
  464. #endif /* __cplusplus */
  465. /* Version information for C files, stored in png.c. This had better match
  466. * the version above.
  467. */
  468. #define png_libpng_ver png_get_header_ver(NULL)
  469. /* This file is arranged in several sections:
  470. *
  471. * 1. Any configuration options that can be specified by for the application
  472. * code when it is built. (Build time configuration is in pnglibconf.h)
  473. * 2. Type definitions (base types are defined in pngconf.h), structure
  474. * definitions.
  475. * 3. Exported library functions.
  476. *
  477. * The library source code has additional files (principally pngpriv.h) that
  478. * allow configuration of the library.
  479. */
  480. /* Section 1: run time configuration
  481. * See pnglibconf.h for build time configuration
  482. *
  483. * Run time configuration allows the application to choose between
  484. * implementations of certain arithmetic APIs. The default is set
  485. * at build time and recorded in pnglibconf.h, but it is safe to
  486. * override these (and only these) settings. Note that this won't
  487. * change what the library does, only application code, and the
  488. * settings can (and probably should) be made on a per-file basis
  489. * by setting the #defines before including png.h
  490. *
  491. * Use macros to read integers from PNG data or use the exported
  492. * functions?
  493. * PNG_USE_READ_MACROS: use the macros (see below) Note that
  494. * the macros evaluate their argument multiple times.
  495. * PNG_NO_USE_READ_MACROS: call the relevant library function.
  496. *
  497. * Use the alternative algorithm for compositing alpha samples that
  498. * does not use division?
  499. * PNG_READ_COMPOSITE_NODIV_SUPPORTED: use the 'no division'
  500. * algorithm.
  501. * PNG_NO_READ_COMPOSITE_NODIV: use the 'division' algorithm.
  502. *
  503. * How to handle benign errors if PNG_ALLOW_BENIGN_ERRORS is
  504. * false?
  505. * PNG_ALLOW_BENIGN_ERRORS: map calls to the benign error
  506. * APIs to png_warning.
  507. * Otherwise the calls are mapped to png_error.
  508. */
  509. /* Section 2: type definitions, including structures and compile time
  510. * constants.
  511. * See pngconf.h for base types that vary by machine/system
  512. */
  513. /* This triggers a compiler error in png.c, if png.c and png.h
  514. * do not agree upon the version number.
  515. */
  516. typedef char* png_libpng_version_1_5_9;
  517. /* Three color definitions. The order of the red, green, and blue, (and the
  518. * exact size) is not important, although the size of the fields need to
  519. * be png_byte or png_uint_16 (as defined below).
  520. */
  521. typedef struct png_color_struct
  522. {
  523. png_byte red;
  524. png_byte green;
  525. png_byte blue;
  526. } png_color;
  527. typedef png_color FAR * png_colorp;
  528. typedef PNG_CONST png_color FAR * png_const_colorp;
  529. typedef png_color FAR * FAR * png_colorpp;
  530. typedef struct png_color_16_struct
  531. {
  532. png_byte index; /* used for palette files */
  533. png_uint_16 red; /* for use in red green blue files */
  534. png_uint_16 green;
  535. png_uint_16 blue;
  536. png_uint_16 gray; /* for use in grayscale files */
  537. } png_color_16;
  538. typedef png_color_16 FAR * png_color_16p;
  539. typedef PNG_CONST png_color_16 FAR * png_const_color_16p;
  540. typedef png_color_16 FAR * FAR * png_color_16pp;
  541. typedef struct png_color_8_struct
  542. {
  543. png_byte red; /* for use in red green blue files */
  544. png_byte green;
  545. png_byte blue;
  546. png_byte gray; /* for use in grayscale files */
  547. png_byte alpha; /* for alpha channel files */
  548. } png_color_8;
  549. typedef png_color_8 FAR * png_color_8p;
  550. typedef PNG_CONST png_color_8 FAR * png_const_color_8p;
  551. typedef png_color_8 FAR * FAR * png_color_8pp;
  552. /*
  553. * The following two structures are used for the in-core representation
  554. * of sPLT chunks.
  555. */
  556. typedef struct png_sPLT_entry_struct
  557. {
  558. png_uint_16 red;
  559. png_uint_16 green;
  560. png_uint_16 blue;
  561. png_uint_16 alpha;
  562. png_uint_16 frequency;
  563. } png_sPLT_entry;
  564. typedef png_sPLT_entry FAR * png_sPLT_entryp;
  565. typedef PNG_CONST png_sPLT_entry FAR * png_const_sPLT_entryp;
  566. typedef png_sPLT_entry FAR * FAR * png_sPLT_entrypp;
  567. /* When the depth of the sPLT palette is 8 bits, the color and alpha samples
  568. * occupy the LSB of their respective members, and the MSB of each member
  569. * is zero-filled. The frequency member always occupies the full 16 bits.
  570. */
  571. typedef struct png_sPLT_struct
  572. {
  573. png_charp name; /* palette name */
  574. png_byte depth; /* depth of palette samples */
  575. png_sPLT_entryp entries; /* palette entries */
  576. png_int_32 nentries; /* number of palette entries */
  577. } png_sPLT_t;
  578. typedef png_sPLT_t FAR * png_sPLT_tp;
  579. typedef PNG_CONST png_sPLT_t FAR * png_const_sPLT_tp;
  580. typedef png_sPLT_t FAR * FAR * png_sPLT_tpp;
  581. #ifdef PNG_TEXT_SUPPORTED
  582. /* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file,
  583. * and whether that contents is compressed or not. The "key" field
  584. * points to a regular zero-terminated C string. The "text" fields can be a
  585. * regular C string, an empty string, or a NULL pointer.
  586. * However, the structure returned by png_get_text() will always contain
  587. * the "text" field as a regular zero-terminated C string (possibly
  588. * empty), never a NULL pointer, so it can be safely used in printf() and
  589. * other string-handling functions. Note that the "itxt_length", "lang", and
  590. * "lang_key" members of the structure only exist when the library is built
  591. * with iTXt chunk support. Prior to libpng-1.4.0 the library was built by
  592. * default without iTXt support. Also note that when iTXt *is* supported,
  593. * the "lang" and "lang_key" fields contain NULL pointers when the
  594. * "compression" field contains * PNG_TEXT_COMPRESSION_NONE or
  595. * PNG_TEXT_COMPRESSION_zTXt. Note that the "compression value" is not the
  596. * same as what appears in the PNG tEXt/zTXt/iTXt chunk's "compression flag"
  597. * which is always 0 or 1, or its "compression method" which is always 0.
  598. */
  599. typedef struct png_text_struct
  600. {
  601. int compression; /* compression value:
  602. -1: tEXt, none
  603. 0: zTXt, deflate
  604. 1: iTXt, none
  605. 2: iTXt, deflate */
  606. png_charp key; /* keyword, 1-79 character description of "text" */
  607. png_charp text; /* comment, may be an empty string (ie "")
  608. or a NULL pointer */
  609. png_size_t text_length; /* length of the text string */
  610. png_size_t itxt_length; /* length of the itxt string */
  611. png_charp lang; /* language code, 0-79 characters
  612. or a NULL pointer */
  613. png_charp lang_key; /* keyword translated UTF-8 string, 0 or more
  614. chars or a NULL pointer */
  615. } png_text;
  616. typedef png_text FAR * png_textp;
  617. typedef PNG_CONST png_text FAR * png_const_textp;
  618. typedef png_text FAR * FAR * png_textpp;
  619. #endif
  620. /* Supported compression types for text in PNG files (tEXt, and zTXt).
  621. * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */
  622. #define PNG_TEXT_COMPRESSION_NONE_WR -3
  623. #define PNG_TEXT_COMPRESSION_zTXt_WR -2
  624. #define PNG_TEXT_COMPRESSION_NONE -1
  625. #define PNG_TEXT_COMPRESSION_zTXt 0
  626. #define PNG_ITXT_COMPRESSION_NONE 1
  627. #define PNG_ITXT_COMPRESSION_zTXt 2
  628. #define PNG_TEXT_COMPRESSION_LAST 3 /* Not a valid value */
  629. /* png_time is a way to hold the time in an machine independent way.
  630. * Two conversions are provided, both from time_t and struct tm. There
  631. * is no portable way to convert to either of these structures, as far
  632. * as I know. If you know of a portable way, send it to me. As a side
  633. * note - PNG has always been Year 2000 compliant!
  634. */
  635. typedef struct png_time_struct
  636. {
  637. png_uint_16 year; /* full year, as in, 1995 */
  638. png_byte month; /* month of year, 1 - 12 */
  639. png_byte day; /* day of month, 1 - 31 */
  640. png_byte hour; /* hour of day, 0 - 23 */
  641. png_byte minute; /* minute of hour, 0 - 59 */
  642. png_byte second; /* second of minute, 0 - 60 (for leap seconds) */
  643. } png_time;
  644. typedef png_time FAR * png_timep;
  645. typedef PNG_CONST png_time FAR * png_const_timep;
  646. typedef png_time FAR * FAR * png_timepp;
  647. #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) || \
  648. defined(PNG_HANDLE_AS_UNKNOWN_SUPPORTED)
  649. /* png_unknown_chunk is a structure to hold queued chunks for which there is
  650. * no specific support. The idea is that we can use this to queue
  651. * up private chunks for output even though the library doesn't actually
  652. * know about their semantics.
  653. */
  654. typedef struct png_unknown_chunk_t
  655. {
  656. png_byte name[5];
  657. png_byte *data;
  658. png_size_t size;
  659. /* libpng-using applications should NOT directly modify this byte. */
  660. png_byte location; /* mode of operation at read time */
  661. }
  662. png_unknown_chunk;
  663. typedef png_unknown_chunk FAR * png_unknown_chunkp;
  664. typedef PNG_CONST png_unknown_chunk FAR * png_const_unknown_chunkp;
  665. typedef png_unknown_chunk FAR * FAR * png_unknown_chunkpp;
  666. #endif
  667. /* Values for the unknown chunk location byte */
  668. #define PNG_HAVE_IHDR 0x01
  669. #define PNG_HAVE_PLTE 0x02
  670. #define PNG_AFTER_IDAT 0x08
  671. /* The complete definition of png_info has, as of libpng-1.5.0,
  672. * been moved into a separate header file that is not accessible to
  673. * applications. Read libpng-manual.txt or libpng.3 for more info.
  674. */
  675. typedef struct png_info_def png_info;
  676. typedef png_info FAR * png_infop;
  677. typedef PNG_CONST png_info FAR * png_const_infop;
  678. typedef png_info FAR * FAR * png_infopp;
  679. /* Maximum positive integer used in PNG is (2^31)-1 */
  680. #define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL)
  681. #define PNG_UINT_32_MAX ((png_uint_32)(-1))
  682. #define PNG_SIZE_MAX ((png_size_t)(-1))
  683. /* These are constants for fixed point values encoded in the
  684. * PNG specification manner (x100000)
  685. */
  686. #define PNG_FP_1 100000
  687. #define PNG_FP_HALF 50000
  688. #define PNG_FP_MAX ((png_fixed_point)0x7fffffffL)
  689. #define PNG_FP_MIN (-PNG_FP_MAX)
  690. /* These describe the color_type field in png_info. */
  691. /* color type masks */
  692. #define PNG_COLOR_MASK_PALETTE 1
  693. #define PNG_COLOR_MASK_COLOR 2
  694. #define PNG_COLOR_MASK_ALPHA 4
  695. /* color types. Note that not all combinations are legal */
  696. #define PNG_COLOR_TYPE_GRAY 0
  697. #define PNG_COLOR_TYPE_PALETTE (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)
  698. #define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR)
  699. #define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)
  700. #define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)
  701. /* aliases */
  702. #define PNG_COLOR_TYPE_RGBA PNG_COLOR_TYPE_RGB_ALPHA
  703. #define PNG_COLOR_TYPE_GA PNG_COLOR_TYPE_GRAY_ALPHA
  704. /* This is for compression type. PNG 1.0-1.2 only define the single type. */
  705. #define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */
  706. #define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE
  707. /* This is for filter type. PNG 1.0-1.2 only define the single type. */
  708. #define PNG_FILTER_TYPE_BASE 0 /* Single row per-byte filtering */
  709. #define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */
  710. #define PNG_FILTER_TYPE_DEFAULT PNG_FILTER_TYPE_BASE
  711. /* These are for the interlacing type. These values should NOT be changed. */
  712. #define PNG_INTERLACE_NONE 0 /* Non-interlaced image */
  713. #define PNG_INTERLACE_ADAM7 1 /* Adam7 interlacing */
  714. #define PNG_INTERLACE_LAST 2 /* Not a valid value */
  715. /* These are for the oFFs chunk. These values should NOT be changed. */
  716. #define PNG_OFFSET_PIXEL 0 /* Offset in pixels */
  717. #define PNG_OFFSET_MICROMETER 1 /* Offset in micrometers (1/10^6 meter) */
  718. #define PNG_OFFSET_LAST 2 /* Not a valid value */
  719. /* These are for the pCAL chunk. These values should NOT be changed. */
  720. #define PNG_EQUATION_LINEAR 0 /* Linear transformation */
  721. #define PNG_EQUATION_BASE_E 1 /* Exponential base e transform */
  722. #define PNG_EQUATION_ARBITRARY 2 /* Arbitrary base exponential transform */
  723. #define PNG_EQUATION_HYPERBOLIC 3 /* Hyperbolic sine transformation */
  724. #define PNG_EQUATION_LAST 4 /* Not a valid value */
  725. /* These are for the sCAL chunk. These values should NOT be changed. */
  726. #define PNG_SCALE_UNKNOWN 0 /* unknown unit (image scale) */
  727. #define PNG_SCALE_METER 1 /* meters per pixel */
  728. #define PNG_SCALE_RADIAN 2 /* radians per pixel */
  729. #define PNG_SCALE_LAST 3 /* Not a valid value */
  730. /* These are for the pHYs chunk. These values should NOT be changed. */
  731. #define PNG_RESOLUTION_UNKNOWN 0 /* pixels/unknown unit (aspect ratio) */
  732. #define PNG_RESOLUTION_METER 1 /* pixels/meter */
  733. #define PNG_RESOLUTION_LAST 2 /* Not a valid value */
  734. /* These are for the sRGB chunk. These values should NOT be changed. */
  735. #define PNG_sRGB_INTENT_PERCEPTUAL 0
  736. #define PNG_sRGB_INTENT_RELATIVE 1
  737. #define PNG_sRGB_INTENT_SATURATION 2
  738. #define PNG_sRGB_INTENT_ABSOLUTE 3
  739. #define PNG_sRGB_INTENT_LAST 4 /* Not a valid value */
  740. /* This is for text chunks */
  741. #define PNG_KEYWORD_MAX_LENGTH 79
  742. /* Maximum number of entries in PLTE/sPLT/tRNS arrays */
  743. #define PNG_MAX_PALETTE_LENGTH 256
  744. /* These determine if an ancillary chunk's data has been successfully read
  745. * from the PNG header, or if the application has filled in the corresponding
  746. * data in the info_struct to be written into the output file. The values
  747. * of the PNG_INFO_<chunk> defines should NOT be changed.
  748. */
  749. #define PNG_INFO_gAMA 0x0001
  750. #define PNG_INFO_sBIT 0x0002
  751. #define PNG_INFO_cHRM 0x0004
  752. #define PNG_INFO_PLTE 0x0008
  753. #define PNG_INFO_tRNS 0x0010
  754. #define PNG_INFO_bKGD 0x0020
  755. #define PNG_INFO_hIST 0x0040
  756. #define PNG_INFO_pHYs 0x0080
  757. #define PNG_INFO_oFFs 0x0100
  758. #define PNG_INFO_tIME 0x0200
  759. #define PNG_INFO_pCAL 0x0400
  760. #define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */
  761. #define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */
  762. #define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */
  763. #define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */
  764. #define PNG_INFO_IDAT 0x8000 /* ESR, 1.0.6 */
  765. /* This is used for the transformation routines, as some of them
  766. * change these values for the row. It also should enable using
  767. * the routines for other purposes.
  768. */
  769. typedef struct png_row_info_struct
  770. {
  771. png_uint_32 width; /* width of row */
  772. png_size_t rowbytes; /* number of bytes in row */
  773. png_byte color_type; /* color type of row */
  774. png_byte bit_depth; /* bit depth of row */
  775. png_byte channels; /* number of channels (1, 2, 3, or 4) */
  776. png_byte pixel_depth; /* bits per pixel (depth * channels) */
  777. } png_row_info;
  778. typedef png_row_info FAR * png_row_infop;
  779. typedef png_row_info FAR * FAR * png_row_infopp;
  780. /* The complete definition of png_struct has, as of libpng-1.5.0,
  781. * been moved into a separate header file that is not accessible to
  782. * applications. Read libpng-manual.txt or libpng.3 for more info.
  783. */
  784. typedef struct png_struct_def png_struct;
  785. typedef PNG_CONST png_struct FAR * png_const_structp;
  786. typedef png_struct FAR * png_structp;
  787. /* These are the function types for the I/O functions and for the functions
  788. * that allow the user to override the default I/O functions with his or her
  789. * own. The png_error_ptr type should match that of user-supplied warning
  790. * and error functions, while the png_rw_ptr type should match that of the
  791. * user read/write data functions. Note that the 'write' function must not
  792. * modify the buffer it is passed. The 'read' function, on the other hand, is
  793. * expected to return the read data in the buffer.
  794. */
  795. typedef PNG_CALLBACK(void, *png_error_ptr, (png_structp, png_const_charp));
  796. typedef PNG_CALLBACK(void, *png_rw_ptr, (png_structp, png_bytep, png_size_t));
  797. typedef PNG_CALLBACK(void, *png_flush_ptr, (png_structp));
  798. typedef PNG_CALLBACK(void, *png_read_status_ptr, (png_structp, png_uint_32,
  799. int));
  800. typedef PNG_CALLBACK(void, *png_write_status_ptr, (png_structp, png_uint_32,
  801. int));
  802. #ifdef PNG_PROGRESSIVE_READ_SUPPORTED
  803. typedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop));
  804. typedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop));
  805. /* The following callback receives png_uint_32 row_number, int pass for the
  806. * png_bytep data of the row. When transforming an interlaced image the
  807. * row number is the row number within the sub-image of the interlace pass, so
  808. * the value will increase to the height of the sub-image (not the full image)
  809. * then reset to 0 for the next pass.
  810. *
  811. * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to
  812. * find the output pixel (x,y) given an interlaced sub-image pixel
  813. * (row,col,pass). (See below for these macros.)
  814. */
  815. typedef PNG_CALLBACK(void, *png_progressive_row_ptr, (png_structp, png_bytep,
  816. png_uint_32, int));
  817. #endif
  818. #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
  819. defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
  820. typedef PNG_CALLBACK(void, *png_user_transform_ptr, (png_structp, png_row_infop,
  821. png_bytep));
  822. #endif
  823. #ifdef PNG_USER_CHUNKS_SUPPORTED
  824. typedef PNG_CALLBACK(int, *png_user_chunk_ptr, (png_structp,
  825. png_unknown_chunkp));
  826. #endif
  827. #ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
  828. typedef PNG_CALLBACK(void, *png_unknown_chunk_ptr, (png_structp));
  829. #endif
  830. #ifdef PNG_SETJMP_SUPPORTED
  831. /* This must match the function definition in <setjmp.h>, and the application
  832. * must include this before png.h to obtain the definition of jmp_buf. The
  833. * function is required to be PNG_NORETURN, but this is not checked. If the
  834. * function does return the application will crash via an abort() or similar
  835. * system level call.
  836. *
  837. * If you get a warning here while building the library you may need to make
  838. * changes to ensure that pnglibconf.h records the calling convention used by
  839. * your compiler. This may be very difficult - try using a different compiler
  840. * to build the library!
  841. */
  842. PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), PNGARG((jmp_buf, int)), typedef);
  843. #endif
  844. /* Transform masks for the high-level interface */
  845. #define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */
  846. #define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */
  847. #define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */
  848. #define PNG_TRANSFORM_PACKING 0x0004 /* read and write */
  849. #define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */
  850. #define PNG_TRANSFORM_EXPAND 0x0010 /* read only */
  851. #define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */
  852. #define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */
  853. #define PNG_TRANSFORM_BGR 0x0080 /* read and write */
  854. #define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */
  855. #define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */
  856. #define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */
  857. #define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* write only */
  858. /* Added to libpng-1.2.34 */
  859. #define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER
  860. #define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */
  861. /* Added to libpng-1.4.0 */
  862. #define PNG_TRANSFORM_GRAY_TO_RGB 0x2000 /* read only */
  863. /* Added to libpng-1.5.4 */
  864. #define PNG_TRANSFORM_EXPAND_16 0x4000 /* read only */
  865. #define PNG_TRANSFORM_SCALE_16 0x8000 /* read only */
  866. /* Flags for MNG supported features */
  867. #define PNG_FLAG_MNG_EMPTY_PLTE 0x01
  868. #define PNG_FLAG_MNG_FILTER_64 0x04
  869. #define PNG_ALL_MNG_FEATURES 0x05
  870. /* NOTE: prior to 1.5 these functions had no 'API' style declaration,
  871. * this allowed the zlib default functions to be used on Windows
  872. * platforms. In 1.5 the zlib default malloc (which just calls malloc and
  873. * ignores the first argument) should be completely compatible with the
  874. * following.
  875. */
  876. typedef PNG_CALLBACK(png_voidp, *png_malloc_ptr, (png_structp,
  877. png_alloc_size_t));
  878. typedef PNG_CALLBACK(void, *png_free_ptr, (png_structp, png_voidp));
  879. typedef png_struct FAR * FAR * png_structpp;
  880. /* Section 3: exported functions
  881. * Here are the function definitions most commonly used. This is not
  882. * the place to find out how to use libpng. See libpng-manual.txt for the
  883. * full explanation, see example.c for the summary. This just provides
  884. * a simple one line description of the use of each function.
  885. *
  886. * The PNG_EXPORT() and PNG_EXPORTA() macros used below are defined in
  887. * pngconf.h and in the *.dfn files in the scripts directory.
  888. *
  889. * PNG_EXPORT(ordinal, type, name, (args));
  890. *
  891. * ordinal: ordinal that is used while building
  892. * *.def files. The ordinal value is only
  893. * relevant when preprocessing png.h with
  894. * the *.dfn files for building symbol table
  895. * entries, and are removed by pngconf.h.
  896. * type: return type of the function
  897. * name: function name
  898. * args: function arguments, with types
  899. *
  900. * When we wish to append attributes to a function prototype we use
  901. * the PNG_EXPORTA() macro instead.
  902. *
  903. * PNG_EXPORTA(ordinal, type, name, (args), attributes);
  904. *
  905. * ordinal, type, name, and args: same as in PNG_EXPORT().
  906. * attributes: function attributes
  907. */
  908. /* Returns the version number of the library */
  909. PNG_EXPORT(1, png_uint_32, png_access_version_number, (void));
  910. /* Tell lib we have already handled the first <num_bytes> magic bytes.
  911. * Handling more than 8 bytes from the beginning of the file is an error.
  912. */
  913. PNG_EXPORT(2, void, png_set_sig_bytes, (png_structp png_ptr, int num_bytes));
  914. /* Check sig[start] through sig[start + num_to_check - 1] to see if it's a
  915. * PNG file. Returns zero if the supplied bytes match the 8-byte PNG
  916. * signature, and non-zero otherwise. Having num_to_check == 0 or
  917. * start > 7 will always fail (ie return non-zero).
  918. */
  919. PNG_EXPORT(3, int, png_sig_cmp, (png_const_bytep sig, png_size_t start,
  920. png_size_t num_to_check));
  921. /* Simple signature checking function. This is the same as calling
  922. * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n).
  923. */
  924. #define png_check_sig(sig, n) !png_sig_cmp((sig), 0, (n))
  925. /* Allocate and initialize png_ptr struct for reading, and any other memory. */
  926. PNG_EXPORTA(4, png_structp, png_create_read_struct,
  927. (png_const_charp user_png_ver, png_voidp error_ptr,
  928. png_error_ptr error_fn, png_error_ptr warn_fn),
  929. PNG_ALLOCATED);
  930. /* Allocate and initialize png_ptr struct for writing, and any other memory */
  931. PNG_EXPORTA(5, png_structp, png_create_write_struct,
  932. (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,
  933. png_error_ptr warn_fn),
  934. PNG_ALLOCATED);
  935. PNG_EXPORT(6, png_size_t, png_get_compression_buffer_size,
  936. (png_const_structp png_ptr));
  937. PNG_EXPORT(7, void, png_set_compression_buffer_size, (png_structp png_ptr,
  938. png_size_t size));
  939. /* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp
  940. * match up.
  941. */
  942. #ifdef PNG_SETJMP_SUPPORTED
  943. /* This function returns the jmp_buf built in to *png_ptr. It must be
  944. * supplied with an appropriate 'longjmp' function to use on that jmp_buf
  945. * unless the default error function is overridden in which case NULL is
  946. * acceptable. The size of the jmp_buf is checked against the actual size
  947. * allocated by the library - the call will return NULL on a mismatch
  948. * indicating an ABI mismatch.
  949. */
  950. PNG_EXPORT(8, jmp_buf*, png_set_longjmp_fn, (png_structp png_ptr,
  951. png_longjmp_ptr longjmp_fn, size_t jmp_buf_size));
  952. # define png_jmpbuf(png_ptr) \
  953. (*png_set_longjmp_fn((png_ptr), longjmp, sizeof (jmp_buf)))
  954. #else
  955. # define png_jmpbuf(png_ptr) \
  956. (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP)
  957. #endif
  958. /* This function should be used by libpng applications in place of
  959. * longjmp(png_ptr->jmpbuf, val). If longjmp_fn() has been set, it
  960. * will use it; otherwise it will call PNG_ABORT(). This function was
  961. * added in libpng-1.5.0.
  962. */
  963. PNG_EXPORTA(9, void, png_longjmp, (png_structp png_ptr, int val),
  964. PNG_NORETURN);
  965. #ifdef PNG_READ_SUPPORTED
  966. /* Reset the compression stream */
  967. PNG_EXPORT(10, int, png_reset_zstream, (png_structp png_ptr));
  968. #endif
  969. /* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */
  970. #ifdef PNG_USER_MEM_SUPPORTED
  971. PNG_EXPORTA(11, png_structp, png_create_read_struct_2,
  972. (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,
  973. png_error_ptr warn_fn,
  974. png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn),
  975. PNG_ALLOCATED);
  976. PNG_EXPORTA(12, png_structp, png_create_write_struct_2,
  977. (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,
  978. png_error_ptr warn_fn,
  979. png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn),
  980. PNG_ALLOCATED);
  981. #endif
  982. /* Write the PNG file signature. */
  983. PNG_EXPORT(13, void, png_write_sig, (png_structp png_ptr));
  984. /* Write a PNG chunk - size, type, (optional) data, CRC. */
  985. PNG_EXPORT(14, void, png_write_chunk, (png_structp png_ptr, png_const_bytep
  986. chunk_name, png_const_bytep data, png_size_t length));
  987. /* Write the start of a PNG chunk - length and chunk name. */
  988. PNG_EXPORT(15, void, png_write_chunk_start, (png_structp png_ptr,
  989. png_const_bytep chunk_name, png_uint_32 length));
  990. /* Write the data of a PNG chunk started with png_write_chunk_start(). */
  991. PNG_EXPORT(16, void, png_write_chunk_data, (png_structp png_ptr,
  992. png_const_bytep data, png_size_t length));
  993. /* Finish a chunk started with png_write_chunk_start() (includes CRC). */
  994. PNG_EXPORT(17, void, png_write_chunk_end, (png_structp png_ptr));
  995. /* Allocate and initialize the info structure */
  996. PNG_EXPORTA(18, png_infop, png_create_info_struct, (png_structp png_ptr),
  997. PNG_ALLOCATED);
  998. PNG_EXPORT(19, void, png_info_init_3, (png_infopp info_ptr,
  999. png_size_t png_info_struct_size));
  1000. /* Writes all the PNG information before the image. */
  1001. PNG_EXPORT(20, void, png_write_info_before_PLTE,
  1002. (png_structp png_ptr, png_infop info_ptr));
  1003. PNG_EXPORT(21, void, png_write_info,
  1004. (png_structp png_ptr, png_infop info_ptr));
  1005. #ifdef PNG_SEQUENTIAL_READ_SUPPORTED
  1006. /* Read the information before the actual image data. */
  1007. PNG_EXPORT(22, void, png_read_info,
  1008. (png_structp png_ptr, png_infop info_ptr));
  1009. #endif
  1010. #ifdef PNG_TIME_RFC1123_SUPPORTED
  1011. PNG_EXPORT(23, png_const_charp, png_convert_to_rfc1123,
  1012. (png_structp png_ptr,
  1013. png_const_timep ptime));
  1014. #endif
  1015. #ifdef PNG_CONVERT_tIME_SUPPORTED
  1016. /* Convert from a struct tm to png_time */
  1017. PNG_EXPORT(24, void, png_convert_from_struct_tm, (png_timep ptime,
  1018. PNG_CONST struct tm FAR * ttime));
  1019. /* Convert from time_t to png_time. Uses gmtime() */
  1020. PNG_EXPORT(25, void, png_convert_from_time_t,
  1021. (png_timep ptime, time_t ttime));
  1022. #endif /* PNG_CONVERT_tIME_SUPPORTED */
  1023. #ifdef PNG_READ_EXPAND_SUPPORTED
  1024. /* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */
  1025. PNG_EXPORT(26, void, png_set_expand, (png_structp png_ptr));
  1026. PNG_EXPORT(27, void, png_set_expand_gray_1_2_4_to_8, (png_structp png_ptr));
  1027. PNG_EXPORT(28, void, png_set_palette_to_rgb, (png_structp png_ptr));
  1028. PNG_EXPORT(29, void, png_set_tRNS_to_alpha, (png_structp png_ptr));
  1029. #endif
  1030. #ifdef PNG_READ_EXPAND_16_SUPPORTED
  1031. /* Expand to 16-bit channels, forces conversion of palette to RGB and expansion
  1032. * of a tRNS chunk if present.
  1033. */
  1034. PNG_EXPORT(221, void, png_set_expand_16, (png_structp png_ptr));
  1035. #endif
  1036. #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
  1037. /* Use blue, green, red order for pixels. */
  1038. PNG_EXPORT(30, void, png_set_bgr, (png_structp png_ptr));
  1039. #endif
  1040. #ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
  1041. /* Expand the grayscale to 24-bit RGB if necessary. */
  1042. PNG_EXPORT(31, void, png_set_gray_to_rgb, (png_structp png_ptr));
  1043. #endif
  1044. #ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
  1045. /* Reduce RGB to grayscale. */
  1046. #define PNG_ERROR_ACTION_NONE 1
  1047. #define PNG_ERROR_ACTION_WARN 2
  1048. #define PNG_ERROR_ACTION_ERROR 3
  1049. #define PNG_RGB_TO_GRAY_DEFAULT (-1)/*for red/green coefficients*/
  1050. PNG_FP_EXPORT(32, void, png_set_rgb_to_gray, (png_structp png_ptr,
  1051. int error_action, double red, double green));
  1052. PNG_FIXED_EXPORT(33, void, png_set_rgb_to_gray_fixed, (png_structp png_ptr,
  1053. int error_action, png_fixed_point red, png_fixed_point green));
  1054. PNG_EXPORT(34, png_byte, png_get_rgb_to_gray_status, (png_const_structp
  1055. png_ptr));
  1056. #endif
  1057. #ifdef PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED
  1058. PNG_EXPORT(35, void, png_build_grayscale_palette, (int bit_depth,
  1059. png_colorp palette));
  1060. #endif
  1061. #ifdef PNG_READ_ALPHA_MODE_SUPPORTED
  1062. /* How the alpha channel is interpreted - this affects how the color channels of
  1063. * a PNG file are returned when an alpha channel, or tRNS chunk in a palette
  1064. * file, is present.
  1065. *
  1066. * This has no effect on the w…