gosu 0.7.10.3 → 0.7.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (545) hide show
  1. data/Gosu/AutoLink.hpp +0 -0
  2. data/Gosu/ButtonsMac.hpp +26 -0
  3. data/Gosu/ButtonsWin.hpp +26 -0
  4. data/Gosu/ButtonsX.hpp +26 -0
  5. data/Gosu/Gosu.hpp +1 -0
  6. data/Gosu/Graphics.hpp +1 -1
  7. data/Gosu/Input.hpp +4 -5
  8. data/Gosu/Math.hpp +11 -0
  9. data/Gosu/Text.hpp +59 -47
  10. data/Gosu/Utility.hpp +6 -5
  11. data/GosuImpl/Graphics/DrawOp.hpp +0 -0
  12. data/GosuImpl/Graphics/Font.cpp +45 -4
  13. data/GosuImpl/Graphics/Graphics.cpp +25 -0
  14. data/GosuImpl/Graphics/TexChunk.cpp +0 -0
  15. data/GosuImpl/Graphics/TexChunk.hpp +0 -0
  16. data/GosuImpl/Graphics/Text.cpp +26 -2
  17. data/GosuImpl/Graphics/TextMac.cpp +8 -2
  18. data/GosuImpl/Graphics/TextPangoFT.cpp +0 -0
  19. data/GosuImpl/Graphics/Texture.cpp +0 -0
  20. data/GosuImpl/Graphics/Texture.hpp +0 -0
  21. data/GosuImpl/Iconv.hpp +62 -0
  22. data/GosuImpl/InputMac.mm +3 -0
  23. data/GosuImpl/InputWin.cpp +5 -1
  24. data/GosuImpl/InputX.cpp +50 -8
  25. data/GosuImpl/Math.cpp +1 -1
  26. data/GosuImpl/RubyGosu.swg +24 -5
  27. data/GosuImpl/RubyGosu_wrap.cxx +181 -10
  28. data/GosuImpl/Utility.cpp +32 -75
  29. data/GosuImpl/Utility.cpp~RF6c566.TMP +95 -0
  30. data/GosuImpl/WindowX.cpp +2 -2
  31. data/Rakefile +57 -10
  32. data/examples/Tutorial.cpp +0 -0
  33. data/examples/media/Beep.wav +0 -0
  34. data/examples/media/CptnRuby Map.txt b/data/examples/media/CptnRuby → Map.txt +0 -0
  35. data/examples/media/Explosion.wav +0 -0
  36. data/examples/media/Space.png +0 -0
  37. data/examples/media/Star.png +0 -0
  38. data/examples/media/Starfighter.bmp +0 -0
  39. data/linux/Makefile.in +0 -0
  40. data/linux/configure +0 -0
  41. data/linux/configure.ac +0 -0
  42. data/mac/Gosu.xcodeproj/jlnr.mode1v3 +1421 -0
  43. data/mac/Gosu.xcodeproj/jlnr.mode2v3 +1464 -0
  44. data/mac/Gosu.xcodeproj/jlnr.pbxuser +733 -0
  45. data/mac/Gosu.xcodeproj/project.pbxproj +4 -2
  46. data/reference/Async_8hpp-source.html +1 -1
  47. data/reference/Audio_8hpp-source.html +1 -1
  48. data/reference/Audio_8hpp.html +1 -1
  49. data/reference/AutoLink_8hpp-source.html +1 -1
  50. data/reference/AutoLink_8hpp.html +1 -1
  51. data/reference/Bitmap_8hpp-source.html +1 -1
  52. data/reference/Bitmap_8hpp.html +1 -1
  53. data/reference/ButtonsMac_8hpp-source.html +107 -81
  54. data/reference/ButtonsWin_8hpp-source.html +84 -58
  55. data/reference/ButtonsX_8hpp-source.html +131 -105
  56. data/reference/Color_8hpp-source.html +1 -1
  57. data/reference/Color_8hpp.html +1 -1
  58. data/reference/Directories_8hpp-source.html +1 -1
  59. data/reference/Directories_8hpp.html +1 -1
  60. data/reference/Font_8hpp-source.html +1 -1
  61. data/reference/Font_8hpp.html +1 -1
  62. data/reference/Fwd_8hpp-source.html +1 -1
  63. data/reference/Fwd_8hpp.html +1 -1
  64. data/reference/Gosu_8hpp-source.html +5 -4
  65. data/reference/Gosu_8hpp.html +1 -1
  66. data/reference/GraphicsBase_8hpp-source.html +1 -1
  67. data/reference/GraphicsBase_8hpp.html +1 -1
  68. data/reference/Graphics_8hpp-source.html +2 -2
  69. data/reference/Graphics_8hpp.html +1 -1
  70. data/reference/IO_8hpp-source.html +1 -1
  71. data/reference/IO_8hpp.html +1 -1
  72. data/reference/ImageData_8hpp-source.html +1 -1
  73. data/reference/ImageData_8hpp.html +1 -1
  74. data/reference/Image_8hpp-source.html +1 -1
  75. data/reference/Image_8hpp.html +1 -1
  76. data/reference/Input_8hpp-source.html +43 -43
  77. data/reference/Input_8hpp.html +2 -2
  78. data/reference/Math_8hpp-source.html +51 -42
  79. data/reference/Math_8hpp.html +5 -1
  80. data/reference/Platform_8hpp-source.html +1 -1
  81. data/reference/Platform_8hpp.html +1 -1
  82. data/reference/RotFlip_8hpp-source.html +1 -1
  83. data/reference/RotFlip_8hpp.html +1 -1
  84. data/reference/Sockets_8hpp-source.html +1 -1
  85. data/reference/Sockets_8hpp.html +1 -1
  86. data/reference/TextInput_8hpp-source.html +1 -1
  87. data/reference/TextInput_8hpp.html +1 -1
  88. data/reference/Text_8hpp-source.html +12 -8
  89. data/reference/Text_8hpp.html +3 -1
  90. data/reference/Timing_8hpp-source.html +1 -1
  91. data/reference/Timing_8hpp.html +1 -1
  92. data/reference/Utility_8hpp-source.html +9 -10
  93. data/reference/Utility_8hpp.html +5 -7
  94. data/reference/WinUtility_8hpp-source.html +1 -1
  95. data/reference/WinUtility_8hpp.html +1 -1
  96. data/reference/Window_8hpp-source.html +3 -3
  97. data/reference/Window_8hpp.html +1 -1
  98. data/reference/annotated.html +2 -2
  99. data/reference/classGosu_1_1Audio-members.html +1 -1
  100. data/reference/classGosu_1_1Audio.html +1 -1
  101. data/reference/classGosu_1_1Bitmap-members.html +1 -1
  102. data/reference/classGosu_1_1Bitmap.html +1 -1
  103. data/reference/classGosu_1_1Buffer-members.html +1 -1
  104. data/reference/classGosu_1_1Buffer.html +1 -1
  105. data/reference/classGosu_1_1Button-members.html +1 -1
  106. data/reference/classGosu_1_1Button.html +1 -1
  107. data/reference/classGosu_1_1Color-members.html +1 -1
  108. data/reference/classGosu_1_1Color.html +1 -1
  109. data/reference/classGosu_1_1File-members.html +1 -1
  110. data/reference/classGosu_1_1File.html +1 -1
  111. data/reference/classGosu_1_1Font-members.html +1 -1
  112. data/reference/classGosu_1_1Font.html +1 -1
  113. data/reference/classGosu_1_1Graphics-members.html +1 -1
  114. data/reference/classGosu_1_1Graphics.html +1 -1
  115. data/reference/classGosu_1_1Image-members.html +1 -1
  116. data/reference/classGosu_1_1Image.html +1 -1
  117. data/reference/classGosu_1_1ImageData-members.html +1 -1
  118. data/reference/classGosu_1_1ImageData.html +1 -1
  119. data/reference/classGosu_1_1Input-members.html +1 -1
  120. data/reference/classGosu_1_1Input.html +4 -4
  121. data/reference/classGosu_1_1MessageSocket-members.html +1 -1
  122. data/reference/classGosu_1_1MessageSocket.html +1 -1
  123. data/reference/classGosu_1_1Resource-members.html +1 -1
  124. data/reference/classGosu_1_1Resource.html +1 -1
  125. data/reference/classGosu_1_1Sample-members.html +1 -1
  126. data/reference/classGosu_1_1Sample.html +1 -1
  127. data/reference/classGosu_1_1SampleInstance-members.html +1 -1
  128. data/reference/classGosu_1_1SampleInstance.html +1 -1
  129. data/reference/classGosu_1_1Song-members.html +1 -1
  130. data/reference/classGosu_1_1Song.html +1 -1
  131. data/reference/classGosu_1_1TextInput-members.html +1 -1
  132. data/reference/classGosu_1_1TextInput.html +1 -1
  133. data/reference/classGosu_1_1Window-members.html +1 -1
  134. data/reference/classGosu_1_1Window.html +1 -1
  135. data/reference/files.html +1 -1
  136. data/reference/functions.html +1 -1
  137. data/reference/functions_enum.html +1 -1
  138. data/reference/functions_func.html +1 -1
  139. data/reference/functions_vars.html +1 -1
  140. data/reference/hierarchy.html +1 -1
  141. data/reference/index.html +1 -1
  142. data/reference/namespaceGosu.html +935 -492
  143. data/reference/namespaceGosu_1_1Colors.html +1 -1
  144. data/reference/namespaceGosu_1_1Win.html +1 -1
  145. data/reference/namespacemembers.html +13 -2
  146. data/reference/namespacemembers_enum.html +1 -1
  147. data/reference/namespacemembers_eval.html +1 -1
  148. data/reference/namespacemembers_func.html +13 -2
  149. data/reference/namespacemembers_type.html +1 -1
  150. data/reference/namespacemembers_vars.html +1 -1
  151. data/reference/namespaces.html +1 -1
  152. data/windows/Gosu.vcproj +4 -4
  153. data/windows/RubyGosu.vcproj +2 -1
  154. data/windows/zlib, libpng/libpng/ANNOUNCE +61 -0
  155. data/windows/zlib, libpng/libpng/CHANGES +2173 -0
  156. data/windows/zlib, libpng/libpng/INSTALL +199 -0
  157. data/windows/zlib, libpng/libpng/KNOWNBUG +22 -0
  158. data/windows/zlib, libpng/libpng/LICENSE +109 -0
  159. data/windows/zlib, libpng/libpng/README +264 -0
  160. data/windows/zlib, libpng/libpng/TODO +24 -0
  161. data/windows/zlib, libpng/libpng/Y2KINFO +55 -0
  162. data/windows/zlib, libpng/libpng/configure +13 -0
  163. data/windows/zlib, libpng/libpng/contrib/gregbook/COPYING +340 -0
  164. data/windows/zlib, libpng/libpng/contrib/gregbook/LICENSE +50 -0
  165. data/windows/zlib, libpng/libpng/contrib/gregbook/Makefile.mingw32 +130 -0
  166. data/windows/zlib, libpng/libpng/contrib/gregbook/Makefile.sgi +104 -0
  167. data/windows/zlib, libpng/libpng/contrib/gregbook/Makefile.unx +132 -0
  168. data/windows/zlib, libpng/libpng/contrib/gregbook/Makefile.w32 +113 -0
  169. data/windows/zlib, libpng/libpng/contrib/gregbook/README +186 -0
  170. data/windows/zlib, libpng/libpng/contrib/gregbook/makevms.com +132 -0
  171. data/windows/zlib, libpng/libpng/contrib/gregbook/readpng.c +304 -0
  172. data/windows/zlib, libpng/libpng/contrib/gregbook/readpng.h +88 -0
  173. data/windows/zlib, libpng/libpng/contrib/gregbook/readpng2.c +645 -0
  174. data/windows/zlib, libpng/libpng/contrib/gregbook/readpng2.h +121 -0
  175. data/windows/zlib, libpng/libpng/contrib/gregbook/readppm.c +179 -0
  176. data/windows/zlib, libpng/libpng/contrib/gregbook/rpng-win.c +684 -0
  177. data/windows/zlib, libpng/libpng/contrib/gregbook/rpng-x.c +904 -0
  178. data/windows/zlib, libpng/libpng/contrib/gregbook/rpng2-win.c +1225 -0
  179. data/windows/zlib, libpng/libpng/contrib/gregbook/rpng2-x.c +2127 -0
  180. data/windows/zlib, libpng/libpng/contrib/gregbook/toucan.png +0 -0
  181. data/windows/zlib, libpng/libpng/contrib/gregbook/wpng.c +853 -0
  182. data/windows/zlib, libpng/libpng/contrib/gregbook/writepng.c +392 -0
  183. data/windows/zlib, libpng/libpng/contrib/gregbook/writepng.h +133 -0
  184. data/windows/zlib, libpng/libpng/contrib/pngminim/decoder/README +6 -0
  185. data/windows/zlib, libpng/libpng/contrib/pngminim/decoder/gather.sh +8 -0
  186. data/windows/zlib, libpng/libpng/contrib/pngminim/decoder/makefile.std +44 -0
  187. data/windows/zlib, libpng/libpng/contrib/pngminim/decoder/pngusr.h +67 -0
  188. data/windows/zlib, libpng/libpng/contrib/pngminim/encoder/README +6 -0
  189. data/windows/zlib, libpng/libpng/contrib/pngminim/encoder/dummy_inflate.c +27 -0
  190. data/windows/zlib, libpng/libpng/contrib/pngminim/encoder/gather.sh +9 -0
  191. data/windows/zlib, libpng/libpng/contrib/pngminim/encoder/makefile.std +43 -0
  192. data/windows/zlib, libpng/libpng/contrib/pngminim/encoder/pngusr.h +66 -0
  193. data/windows/zlib, libpng/libpng/contrib/pngminus/README +153 -0
  194. data/windows/zlib, libpng/libpng/contrib/pngminus/makefile.std +65 -0
  195. data/windows/zlib, libpng/libpng/contrib/pngminus/makefile.tc3 +38 -0
  196. data/windows/zlib, libpng/libpng/contrib/pngminus/makevms.com +92 -0
  197. data/windows/zlib, libpng/libpng/contrib/pngminus/png2pnm.bat +41 -0
  198. data/windows/zlib, libpng/libpng/contrib/pngminus/png2pnm.c +430 -0
  199. data/windows/zlib, libpng/libpng/contrib/pngminus/png2pnm.sh +42 -0
  200. data/windows/zlib, libpng/libpng/contrib/pngminus/pngminus.bat +4 -0
  201. data/windows/zlib, libpng/libpng/contrib/pngminus/pngminus.sh +5 -0
  202. data/windows/zlib, libpng/libpng/contrib/pngminus/pnm2png.bat +41 -0
  203. data/windows/zlib, libpng/libpng/contrib/pngminus/pnm2png.c +533 -0
  204. data/windows/zlib, libpng/libpng/contrib/pngminus/pnm2png.sh +42 -0
  205. data/windows/zlib, libpng/libpng/contrib/pngsuite/basn0g01.png +0 -0
  206. data/windows/zlib, libpng/libpng/contrib/pngsuite/basn0g02.png +0 -0
  207. data/windows/zlib, libpng/libpng/contrib/pngsuite/basn0g04.png +0 -0
  208. data/windows/zlib, libpng/libpng/contrib/pngsuite/basn0g08.png +0 -0
  209. data/windows/zlib, libpng/libpng/contrib/pngsuite/basn0g16.png +0 -0
  210. data/windows/zlib, libpng/libpng/contrib/pngsuite/basn2c08.png +0 -0
  211. data/windows/zlib, libpng/libpng/contrib/pngsuite/basn2c16.png +0 -0
  212. data/windows/zlib, libpng/libpng/contrib/pngsuite/basn3p01.png +0 -0
  213. data/windows/zlib, libpng/libpng/contrib/pngsuite/basn3p02.png +0 -0
  214. data/windows/zlib, libpng/libpng/contrib/pngsuite/basn3p04.png +0 -0
  215. data/windows/zlib, libpng/libpng/contrib/pngsuite/basn3p08.png +0 -0
  216. data/windows/zlib, libpng/libpng/contrib/pngsuite/basn4a08.png +0 -0
  217. data/windows/zlib, libpng/libpng/contrib/pngsuite/basn4a16.png +0 -0
  218. data/windows/zlib, libpng/libpng/contrib/pngsuite/basn6a08.png +0 -0
  219. data/windows/zlib, libpng/libpng/contrib/pngsuite/basn6a16.png +0 -0
  220. data/windows/zlib, libpng/libpng/contrib/visupng/PngFile.c +439 -0
  221. data/windows/zlib, libpng/libpng/contrib/visupng/PngFile.h +27 -0
  222. data/windows/zlib, libpng/libpng/contrib/visupng/README.txt +58 -0
  223. data/windows/zlib, libpng/libpng/contrib/visupng/VisualPng.c +961 -0
  224. data/windows/zlib, libpng/libpng/contrib/visupng/VisualPng.dsp +147 -0
  225. data/windows/zlib, libpng/libpng/contrib/visupng/VisualPng.dsw +29 -0
  226. data/windows/zlib, libpng/libpng/contrib/visupng/VisualPng.ico +0 -0
  227. data/windows/zlib, libpng/libpng/contrib/visupng/VisualPng.png +0 -0
  228. data/windows/zlib, libpng/libpng/contrib/visupng/VisualPng.rc +152 -0
  229. data/windows/zlib, libpng/libpng/contrib/visupng/cexcept.h +243 -0
  230. data/windows/zlib, libpng/libpng/contrib/visupng/resource.h +23 -0
  231. data/windows/zlib, libpng/libpng/example.c +814 -0
  232. data/windows/zlib, libpng/libpng/libpng-1.2.29.txt +2906 -0
  233. data/windows/zlib, libpng/libpng/libpng.3 +3680 -0
  234. data/windows/zlib, libpng/libpng/libpngpf.3 +274 -0
  235. data/windows/zlib, libpng/libpng/png.5 +74 -0
  236. data/windows/zlib, libpng/libpng/png.c +798 -0
  237. data/windows/zlib, libpng/libpng/png.h +3569 -0
  238. data/windows/zlib, libpng/libpng/pngbar.jpg +0 -0
  239. data/windows/zlib, libpng/libpng/pngbar.png +0 -0
  240. data/windows/zlib, libpng/libpng/pngconf.h +1481 -0
  241. data/windows/zlib, libpng/libpng/pngerror.c +343 -0
  242. data/windows/zlib, libpng/libpng/pnggccrd.c +103 -0
  243. data/windows/zlib, libpng/libpng/pngget.c +901 -0
  244. data/windows/zlib, libpng/libpng/pngmem.c +608 -0
  245. data/windows/zlib, libpng/libpng/pngnow.png +0 -0
  246. data/windows/zlib, libpng/libpng/pngpread.c +1598 -0
  247. data/windows/zlib, libpng/libpng/pngread.c +1479 -0
  248. data/windows/zlib, libpng/libpng/pngrio.c +167 -0
  249. data/windows/zlib, libpng/libpng/pngrtran.c +4292 -0
  250. data/windows/zlib, libpng/libpng/pngrutil.c +3183 -0
  251. data/windows/zlib, libpng/libpng/pngset.c +1268 -0
  252. data/windows/zlib, libpng/libpng/pngtest.c +1563 -0
  253. data/windows/zlib, libpng/libpng/pngtest.png +0 -0
  254. data/windows/zlib, libpng/libpng/pngtrans.c +662 -0
  255. data/windows/zlib, libpng/libpng/pngvcrd.c +1 -0
  256. data/windows/zlib, libpng/libpng/pngwio.c +234 -0
  257. data/windows/zlib, libpng/libpng/pngwrite.c +1532 -0
  258. data/windows/zlib, libpng/libpng/pngwtran.c +572 -0
  259. data/windows/zlib, libpng/libpng/pngwutil.c +2802 -0
  260. data/windows/zlib, libpng/libpng/projects/beos/x86-shared.proj +0 -0
  261. data/windows/zlib, libpng/libpng/projects/beos/x86-shared.txt +22 -0
  262. data/windows/zlib, libpng/libpng/projects/beos/x86-static.proj +0 -0
  263. data/windows/zlib, libpng/libpng/projects/beos/x86-static.txt +22 -0
  264. data/windows/zlib, libpng/libpng/projects/cbuilder5/libpng.bpf +22 -0
  265. data/windows/zlib, libpng/libpng/projects/cbuilder5/libpng.bpg +25 -0
  266. data/windows/zlib, libpng/libpng/projects/cbuilder5/libpng.bpr +157 -0
  267. data/windows/zlib, libpng/libpng/projects/cbuilder5/libpng.cpp +29 -0
  268. data/windows/zlib, libpng/libpng/projects/cbuilder5/libpng.readme.txt +25 -0
  269. data/windows/zlib, libpng/libpng/projects/cbuilder5/libpngstat.bpf +22 -0
  270. data/windows/zlib, libpng/libpng/projects/cbuilder5/libpngstat.bpr +109 -0
  271. data/windows/zlib, libpng/libpng/projects/cbuilder5/zlib.readme.txt +14 -0
  272. data/windows/zlib, libpng/libpng/projects/netware.txt +6 -0
  273. data/windows/zlib, libpng/libpng/projects/visualc6/README.txt +57 -0
  274. data/windows/zlib, libpng/libpng/projects/visualc6/libpng.dsp +472 -0
  275. data/windows/zlib, libpng/libpng/projects/visualc6/libpng.dsw +59 -0
  276. data/windows/zlib, libpng/libpng/projects/visualc6/pngtest.dsp +314 -0
  277. data/windows/zlib, libpng/libpng/projects/visualc71/PRJ0041.mak +21 -0
  278. data/windows/zlib, libpng/libpng/projects/visualc71/README.txt +57 -0
  279. data/windows/zlib, libpng/libpng/projects/visualc71/README_zlib.txt +44 -0
  280. data/windows/zlib, libpng/libpng/projects/visualc71/libpng.sln +88 -0
  281. data/windows/zlib, libpng/libpng/projects/visualc71/libpng.vcproj +702 -0
  282. data/windows/zlib, libpng/libpng/projects/visualc71/pngtest.vcproj +459 -0
  283. data/windows/zlib, libpng/libpng/projects/visualc71/zlib.vcproj +670 -0
  284. data/windows/zlib, libpng/libpng/projects/wince.txt +6 -0
  285. data/windows/zlib, libpng/libpng/scripts/CMakeLists.txt +210 -0
  286. data/windows/zlib, libpng/libpng/scripts/SCOPTIONS.ppc +7 -0
  287. data/windows/zlib, libpng/libpng/scripts/descrip.mms +52 -0
  288. data/windows/zlib, libpng/libpng/scripts/libpng-config-body.in +96 -0
  289. data/windows/zlib, libpng/libpng/scripts/libpng-config-head.in +21 -0
  290. data/windows/zlib, libpng/libpng/scripts/libpng-config.in +124 -0
  291. data/windows/zlib, libpng/libpng/scripts/libpng.icc +44 -0
  292. data/windows/zlib, libpng/libpng/scripts/libpng.pc-configure.in +10 -0
  293. data/windows/zlib, libpng/libpng/scripts/libpng.pc.in +10 -0
  294. data/windows/zlib, libpng/libpng/scripts/makefile.32sunu +254 -0
  295. data/windows/zlib, libpng/libpng/scripts/makefile.64sunu +254 -0
  296. data/windows/zlib, libpng/libpng/scripts/makefile.acorn +51 -0
  297. data/windows/zlib, libpng/libpng/scripts/makefile.aix +113 -0
  298. data/windows/zlib, libpng/libpng/scripts/makefile.amiga +48 -0
  299. data/windows/zlib, libpng/libpng/scripts/makefile.atari +51 -0
  300. data/windows/zlib, libpng/libpng/scripts/makefile.bc32 +152 -0
  301. data/windows/zlib, libpng/libpng/scripts/makefile.beos +226 -0
  302. data/windows/zlib, libpng/libpng/scripts/makefile.bor +162 -0
  303. data/windows/zlib, libpng/libpng/scripts/makefile.cygwin +299 -0
  304. data/windows/zlib, libpng/libpng/scripts/makefile.darwin +234 -0
  305. data/windows/zlib, libpng/libpng/scripts/makefile.dec +214 -0
  306. data/windows/zlib, libpng/libpng/scripts/makefile.dj2 +55 -0
  307. data/windows/zlib, libpng/libpng/scripts/makefile.elf +275 -0
  308. data/windows/zlib, libpng/libpng/scripts/makefile.freebsd +48 -0
  309. data/windows/zlib, libpng/libpng/scripts/makefile.gcc +79 -0
  310. data/windows/zlib, libpng/libpng/scripts/makefile.gcmmx +271 -0
  311. data/windows/zlib, libpng/libpng/scripts/makefile.hp64 +235 -0
  312. data/windows/zlib, libpng/libpng/scripts/makefile.hpgcc +245 -0
  313. data/windows/zlib, libpng/libpng/scripts/makefile.hpux +232 -0
  314. data/windows/zlib, libpng/libpng/scripts/makefile.ibmc +71 -0
  315. data/windows/zlib, libpng/libpng/scripts/makefile.intel +102 -0
  316. data/windows/zlib, libpng/libpng/scripts/makefile.knr +99 -0
  317. data/windows/zlib, libpng/libpng/scripts/makefile.linux +249 -0
  318. data/windows/zlib, libpng/libpng/scripts/makefile.mingw +289 -0
  319. data/windows/zlib, libpng/libpng/scripts/makefile.mips +83 -0
  320. data/windows/zlib, libpng/libpng/scripts/makefile.msc +86 -0
  321. data/windows/zlib, libpng/libpng/scripts/makefile.ne12bsd +45 -0
  322. data/windows/zlib, libpng/libpng/scripts/makefile.netbsd +45 -0
  323. data/windows/zlib, libpng/libpng/scripts/makefile.nommx +252 -0
  324. data/windows/zlib, libpng/libpng/scripts/makefile.openbsd +73 -0
  325. data/windows/zlib, libpng/libpng/scripts/makefile.os2 +69 -0
  326. data/windows/zlib, libpng/libpng/scripts/makefile.sco +229 -0
  327. data/windows/zlib, libpng/libpng/scripts/makefile.sggcc +242 -0
  328. data/windows/zlib, libpng/libpng/scripts/makefile.sgi +245 -0
  329. data/windows/zlib, libpng/libpng/scripts/makefile.so9 +251 -0
  330. data/windows/zlib, libpng/libpng/scripts/makefile.solaris +249 -0
  331. data/windows/zlib, libpng/libpng/scripts/makefile.solaris-x86 +248 -0
  332. data/windows/zlib, libpng/libpng/scripts/makefile.std +92 -0
  333. data/windows/zlib, libpng/libpng/scripts/makefile.sunos +97 -0
  334. data/windows/zlib, libpng/libpng/scripts/makefile.tc3 +89 -0
  335. data/windows/zlib, libpng/libpng/scripts/makefile.vcawin32 +99 -0
  336. data/windows/zlib, libpng/libpng/scripts/makefile.vcwin32 +99 -0
  337. data/windows/zlib, libpng/libpng/scripts/makefile.watcom +109 -0
  338. data/windows/zlib, libpng/libpng/scripts/makevms.com +144 -0
  339. data/windows/zlib, libpng/libpng/scripts/pngos2.def +257 -0
  340. data/windows/zlib, libpng/libpng/scripts/pngw32.def +238 -0
  341. data/windows/zlib, libpng/libpng/scripts/pngw32.rc +112 -0
  342. data/windows/zlib, libpng/libpng/scripts/smakefile.ppc +30 -0
  343. data/windows/zlib, libpng/zlib/ChangeLog +855 -0
  344. data/windows/zlib, libpng/zlib/FAQ +339 -0
  345. data/windows/zlib, libpng/zlib/INDEX +51 -0
  346. data/windows/zlib, libpng/zlib/Makefile +154 -0
  347. data/windows/zlib, libpng/zlib/Makefile.in +154 -0
  348. data/windows/zlib, libpng/zlib/README +125 -0
  349. data/windows/zlib, libpng/zlib/adler32.c +149 -0
  350. data/windows/zlib, libpng/zlib/algorithm.txt +209 -0
  351. data/windows/zlib, libpng/zlib/amiga/Makefile.pup +66 -0
  352. data/windows/zlib, libpng/zlib/amiga/Makefile.sas +65 -0
  353. data/windows/zlib, libpng/zlib/as400/bndsrc +132 -0
  354. data/windows/zlib, libpng/zlib/as400/compile.clp +123 -0
  355. data/windows/zlib, libpng/zlib/as400/readme.txt +111 -0
  356. data/windows/zlib, libpng/zlib/as400/zlib.inc +331 -0
  357. data/windows/zlib, libpng/zlib/compress.c +79 -0
  358. data/windows/zlib, libpng/zlib/configure +459 -0
  359. data/windows/zlib, libpng/zlib/contrib/README.contrib +71 -0
  360. data/windows/zlib, libpng/zlib/contrib/ada/buffer_demo.adb +106 -0
  361. data/windows/zlib, libpng/zlib/contrib/ada/mtest.adb +156 -0
  362. data/windows/zlib, libpng/zlib/contrib/ada/read.adb +156 -0
  363. data/windows/zlib, libpng/zlib/contrib/ada/readme.txt +65 -0
  364. data/windows/zlib, libpng/zlib/contrib/ada/test.adb +463 -0
  365. data/windows/zlib, libpng/zlib/contrib/ada/zlib-streams.adb +225 -0
  366. data/windows/zlib, libpng/zlib/contrib/ada/zlib-streams.ads +114 -0
  367. data/windows/zlib, libpng/zlib/contrib/ada/zlib-thin.adb +141 -0
  368. data/windows/zlib, libpng/zlib/contrib/ada/zlib-thin.ads +450 -0
  369. data/windows/zlib, libpng/zlib/contrib/ada/zlib.adb +701 -0
  370. data/windows/zlib, libpng/zlib/contrib/ada/zlib.ads +328 -0
  371. data/windows/zlib, libpng/zlib/contrib/ada/zlib.gpr +20 -0
  372. data/windows/zlib, libpng/zlib/contrib/asm586/README.586 +43 -0
  373. data/windows/zlib, libpng/zlib/contrib/asm586/match.S +364 -0
  374. data/windows/zlib, libpng/zlib/contrib/asm686/README.686 +34 -0
  375. data/windows/zlib, libpng/zlib/contrib/asm686/match.S +329 -0
  376. data/windows/zlib, libpng/zlib/contrib/blast/Makefile +8 -0
  377. data/windows/zlib, libpng/zlib/contrib/blast/README +4 -0
  378. data/windows/zlib, libpng/zlib/contrib/blast/blast.c +444 -0
  379. data/windows/zlib, libpng/zlib/contrib/blast/blast.h +71 -0
  380. data/windows/zlib, libpng/zlib/contrib/blast/test.pk +0 -0
  381. data/windows/zlib, libpng/zlib/contrib/blast/test.txt +1 -0
  382. data/windows/zlib, libpng/zlib/contrib/delphi/ZLib.pas +557 -0
  383. data/windows/zlib, libpng/zlib/contrib/delphi/ZLibConst.pas +11 -0
  384. data/windows/zlib, libpng/zlib/contrib/delphi/readme.txt +76 -0
  385. data/windows/zlib, libpng/zlib/contrib/delphi/zlibd32.mak +93 -0
  386. data/windows/zlib, libpng/zlib/contrib/dotzlib/DotZLib.build +33 -0
  387. data/windows/zlib, libpng/zlib/contrib/dotzlib/DotZLib.chm +0 -0
  388. data/windows/zlib, libpng/zlib/contrib/dotzlib/DotZLib.sln +21 -0
  389. data/windows/zlib, libpng/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs +58 -0
  390. data/windows/zlib, libpng/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs +202 -0
  391. data/windows/zlib, libpng/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs +83 -0
  392. data/windows/zlib, libpng/zlib/contrib/dotzlib/DotZLib/CodecBase.cs +198 -0
  393. data/windows/zlib, libpng/zlib/contrib/dotzlib/DotZLib/Deflater.cs +106 -0
  394. data/windows/zlib, libpng/zlib/contrib/dotzlib/DotZLib/DotZLib.cs +288 -0
  395. data/windows/zlib, libpng/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj +141 -0
  396. data/windows/zlib, libpng/zlib/contrib/dotzlib/DotZLib/GZipStream.cs +301 -0
  397. data/windows/zlib, libpng/zlib/contrib/dotzlib/DotZLib/Inflater.cs +105 -0
  398. data/windows/zlib, libpng/zlib/contrib/dotzlib/DotZLib/UnitTests.cs +274 -0
  399. data/windows/zlib, libpng/zlib/contrib/dotzlib/LICENSE_1_0.txt +23 -0
  400. data/windows/zlib, libpng/zlib/contrib/dotzlib/readme.txt +58 -0
  401. data/windows/zlib, libpng/zlib/contrib/infback9/README +1 -0
  402. data/windows/zlib, libpng/zlib/contrib/infback9/infback9.c +608 -0
  403. data/windows/zlib, libpng/zlib/contrib/infback9/infback9.h +37 -0
  404. data/windows/zlib, libpng/zlib/contrib/infback9/inffix9.h +107 -0
  405. data/windows/zlib, libpng/zlib/contrib/infback9/inflate9.h +47 -0
  406. data/windows/zlib, libpng/zlib/contrib/infback9/inftree9.c +323 -0
  407. data/windows/zlib, libpng/zlib/contrib/infback9/inftree9.h +55 -0
  408. data/windows/zlib, libpng/zlib/contrib/inflate86/inffas86.c +1157 -0
  409. data/windows/zlib, libpng/zlib/contrib/inflate86/inffast.S +1368 -0
  410. data/windows/zlib, libpng/zlib/contrib/iostream/test.cpp +24 -0
  411. data/windows/zlib, libpng/zlib/contrib/iostream/zfstream.cpp +329 -0
  412. data/windows/zlib, libpng/zlib/contrib/iostream/zfstream.h +128 -0
  413. data/windows/zlib, libpng/zlib/contrib/iostream2/zstream.h +307 -0
  414. data/windows/zlib, libpng/zlib/contrib/iostream2/zstream_test.cpp +25 -0
  415. data/windows/zlib, libpng/zlib/contrib/iostream3/README +35 -0
  416. data/windows/zlib, libpng/zlib/contrib/iostream3/TODO +17 -0
  417. data/windows/zlib, libpng/zlib/contrib/iostream3/test.cc +50 -0
  418. data/windows/zlib, libpng/zlib/contrib/iostream3/zfstream.cc +479 -0
  419. data/windows/zlib, libpng/zlib/contrib/iostream3/zfstream.h +466 -0
  420. data/windows/zlib, libpng/zlib/contrib/masm686/match.asm +413 -0
  421. data/windows/zlib, libpng/zlib/contrib/masmx64/bld_ml64.bat +2 -0
  422. data/windows/zlib, libpng/zlib/contrib/masmx64/gvmat64.asm +513 -0
  423. data/windows/zlib, libpng/zlib/contrib/masmx64/gvmat64.obj +0 -0
  424. data/windows/zlib, libpng/zlib/contrib/masmx64/inffas8664.c +186 -0
  425. data/windows/zlib, libpng/zlib/contrib/masmx64/inffasx64.asm +392 -0
  426. data/windows/zlib, libpng/zlib/contrib/masmx64/inffasx64.obj +0 -0
  427. data/windows/zlib, libpng/zlib/contrib/masmx64/readme.txt +28 -0
  428. data/windows/zlib, libpng/zlib/contrib/masmx86/bld_ml32.bat +2 -0
  429. data/windows/zlib, libpng/zlib/contrib/masmx86/gvmat32.asm +972 -0
  430. data/windows/zlib, libpng/zlib/contrib/masmx86/gvmat32.obj +0 -0
  431. data/windows/zlib, libpng/zlib/contrib/masmx86/gvmat32c.c +62 -0
  432. data/windows/zlib, libpng/zlib/contrib/masmx86/inffas32.asm +1083 -0
  433. data/windows/zlib, libpng/zlib/contrib/masmx86/inffas32.obj +0 -0
  434. data/windows/zlib, libpng/zlib/contrib/masmx86/mkasm.bat +3 -0
  435. data/windows/zlib, libpng/zlib/contrib/masmx86/readme.txt +21 -0
  436. data/windows/zlib, libpng/zlib/contrib/minizip/ChangeLogUnzip +67 -0
  437. data/windows/zlib, libpng/zlib/contrib/minizip/Makefile +25 -0
  438. data/windows/zlib, libpng/zlib/contrib/minizip/crypt.h +132 -0
  439. data/windows/zlib, libpng/zlib/contrib/minizip/ioapi.c +177 -0
  440. data/windows/zlib, libpng/zlib/contrib/minizip/ioapi.h +75 -0
  441. data/windows/zlib, libpng/zlib/contrib/minizip/iowin32.c +270 -0
  442. data/windows/zlib, libpng/zlib/contrib/minizip/iowin32.h +21 -0
  443. data/windows/zlib, libpng/zlib/contrib/minizip/miniunz.c +585 -0
  444. data/windows/zlib, libpng/zlib/contrib/minizip/minizip.c +420 -0
  445. data/windows/zlib, libpng/zlib/contrib/minizip/mztools.c +281 -0
  446. data/windows/zlib, libpng/zlib/contrib/minizip/mztools.h +31 -0
  447. data/windows/zlib, libpng/zlib/contrib/minizip/unzip.c +1598 -0
  448. data/windows/zlib, libpng/zlib/contrib/minizip/unzip.h +354 -0
  449. data/windows/zlib, libpng/zlib/contrib/minizip/zip.c +1219 -0
  450. data/windows/zlib, libpng/zlib/contrib/minizip/zip.h +235 -0
  451. data/windows/zlib, libpng/zlib/contrib/pascal/example.pas +599 -0
  452. data/windows/zlib, libpng/zlib/contrib/pascal/readme.txt +76 -0
  453. data/windows/zlib, libpng/zlib/contrib/pascal/zlibd32.mak +93 -0
  454. data/windows/zlib, libpng/zlib/contrib/pascal/zlibpas.pas +236 -0
  455. data/windows/zlib, libpng/zlib/contrib/puff/Makefile +8 -0
  456. data/windows/zlib, libpng/zlib/contrib/puff/README +63 -0
  457. data/windows/zlib, libpng/zlib/contrib/puff/puff.c +837 -0
  458. data/windows/zlib, libpng/zlib/contrib/puff/puff.h +31 -0
  459. data/windows/zlib, libpng/zlib/contrib/puff/zeros.raw +0 -0
  460. data/windows/zlib, libpng/zlib/contrib/testzlib/testzlib.c +275 -0
  461. data/windows/zlib, libpng/zlib/contrib/testzlib/testzlib.txt +10 -0
  462. data/windows/zlib, libpng/zlib/contrib/untgz/Makefile +14 -0
  463. data/windows/zlib, libpng/zlib/contrib/untgz/Makefile.msc +17 -0
  464. data/windows/zlib, libpng/zlib/contrib/untgz/untgz.c +674 -0
  465. data/windows/zlib, libpng/zlib/contrib/vstudio/readme.txt +73 -0
  466. data/windows/zlib, libpng/zlib/contrib/vstudio/vc7/miniunz.vcproj +126 -0
  467. data/windows/zlib, libpng/zlib/contrib/vstudio/vc7/minizip.vcproj +126 -0
  468. data/windows/zlib, libpng/zlib/contrib/vstudio/vc7/testzlib.vcproj +126 -0
  469. data/windows/zlib, libpng/zlib/contrib/vstudio/vc7/zlib.rc +32 -0
  470. data/windows/zlib, libpng/zlib/contrib/vstudio/vc7/zlibstat.vcproj +246 -0
  471. data/windows/zlib, libpng/zlib/contrib/vstudio/vc7/zlibvc.def +92 -0
  472. data/windows/zlib, libpng/zlib/contrib/vstudio/vc7/zlibvc.sln +78 -0
  473. data/windows/zlib, libpng/zlib/contrib/vstudio/vc7/zlibvc.vcproj +445 -0
  474. data/windows/zlib, libpng/zlib/contrib/vstudio/vc8/miniunz.vcproj +566 -0
  475. data/windows/zlib, libpng/zlib/contrib/vstudio/vc8/minizip.vcproj +563 -0
  476. data/windows/zlib, libpng/zlib/contrib/vstudio/vc8/testzlib.vcproj +948 -0
  477. data/windows/zlib, libpng/zlib/contrib/vstudio/vc8/testzlibdll.vcproj +567 -0
  478. data/windows/zlib, libpng/zlib/contrib/vstudio/vc8/zlib.rc +32 -0
  479. data/windows/zlib, libpng/zlib/contrib/vstudio/vc8/zlibstat.vcproj +870 -0
  480. data/windows/zlib, libpng/zlib/contrib/vstudio/vc8/zlibvc.def +92 -0
  481. data/windows/zlib, libpng/zlib/contrib/vstudio/vc8/zlibvc.sln +144 -0
  482. data/windows/zlib, libpng/zlib/contrib/vstudio/vc8/zlibvc.vcproj +1219 -0
  483. data/windows/zlib, libpng/zlib/crc32.c +423 -0
  484. data/windows/zlib, libpng/zlib/crc32.h +441 -0
  485. data/windows/zlib, libpng/zlib/deflate.c +1736 -0
  486. data/windows/zlib, libpng/zlib/deflate.h +331 -0
  487. data/windows/zlib, libpng/zlib/example.c +565 -0
  488. data/windows/zlib, libpng/zlib/examples/README.examples +42 -0
  489. data/windows/zlib, libpng/zlib/examples/fitblk.c +233 -0
  490. data/windows/zlib, libpng/zlib/examples/gun.c +693 -0
  491. data/windows/zlib, libpng/zlib/examples/gzappend.c +500 -0
  492. data/windows/zlib, libpng/zlib/examples/gzjoin.c +448 -0
  493. data/windows/zlib, libpng/zlib/examples/gzlog.c +413 -0
  494. data/windows/zlib, libpng/zlib/examples/gzlog.h +58 -0
  495. data/windows/zlib, libpng/zlib/examples/zlib_how.html +523 -0
  496. data/windows/zlib, libpng/zlib/examples/zpipe.c +191 -0
  497. data/windows/zlib, libpng/zlib/examples/zran.c +404 -0
  498. data/windows/zlib, libpng/zlib/gzio.c +1026 -0
  499. data/windows/zlib, libpng/zlib/infback.c +623 -0
  500. data/windows/zlib, libpng/zlib/inffast.c +318 -0
  501. data/windows/zlib, libpng/zlib/inffast.h +11 -0
  502. data/windows/zlib, libpng/zlib/inffixed.h +94 -0
  503. data/windows/zlib, libpng/zlib/inflate.c +1368 -0
  504. data/windows/zlib, libpng/zlib/inflate.h +115 -0
  505. data/windows/zlib, libpng/zlib/inftrees.c +329 -0
  506. data/windows/zlib, libpng/zlib/inftrees.h +55 -0
  507. data/windows/zlib, libpng/zlib/make_vms.com +461 -0
  508. data/windows/zlib, libpng/zlib/minigzip.c +322 -0
  509. data/windows/zlib, libpng/zlib/msdos/Makefile.bor +109 -0
  510. data/windows/zlib, libpng/zlib/msdos/Makefile.dj2 +104 -0
  511. data/windows/zlib, libpng/zlib/msdos/Makefile.emx +69 -0
  512. data/windows/zlib, libpng/zlib/msdos/Makefile.msc +106 -0
  513. data/windows/zlib, libpng/zlib/msdos/Makefile.tc +94 -0
  514. data/windows/zlib, libpng/zlib/old/Makefile.riscos +151 -0
  515. data/windows/zlib, libpng/zlib/old/README +3 -0
  516. data/windows/zlib, libpng/zlib/old/descrip.mms +48 -0
  517. data/windows/zlib, libpng/zlib/old/os2/Makefile.os2 +136 -0
  518. data/windows/zlib, libpng/zlib/old/os2/zlib.def +51 -0
  519. data/windows/zlib, libpng/zlib/old/visual-basic.txt +160 -0
  520. data/windows/zlib, libpng/zlib/old/zlib.html +971 -0
  521. data/windows/zlib, libpng/zlib/projects/README.projects +41 -0
  522. data/windows/zlib, libpng/zlib/projects/visualc6/README.txt +73 -0
  523. data/windows/zlib, libpng/zlib/projects/visualc6/example.dsp +278 -0
  524. data/windows/zlib, libpng/zlib/projects/visualc6/minigzip.dsp +278 -0
  525. data/windows/zlib, libpng/zlib/projects/visualc6/zlib.dsp +609 -0
  526. data/windows/zlib, libpng/zlib/projects/visualc6/zlib.dsw +59 -0
  527. data/windows/zlib, libpng/zlib/qnx/package.qpg +141 -0
  528. data/windows/zlib, libpng/zlib/trees.c +1219 -0
  529. data/windows/zlib, libpng/zlib/trees.h +128 -0
  530. data/windows/zlib, libpng/zlib/uncompr.c +61 -0
  531. data/windows/zlib, libpng/zlib/win32/DLL_FAQ.txt +397 -0
  532. data/windows/zlib, libpng/zlib/win32/Makefile.bor +107 -0
  533. data/windows/zlib, libpng/zlib/win32/Makefile.emx +69 -0
  534. data/windows/zlib, libpng/zlib/win32/Makefile.gcc +141 -0
  535. data/windows/zlib, libpng/zlib/win32/Makefile.msc +126 -0
  536. data/windows/zlib, libpng/zlib/win32/VisualC.txt +3 -0
  537. data/windows/zlib, libpng/zlib/win32/zlib.def +60 -0
  538. data/windows/zlib, libpng/zlib/win32/zlib1.rc +39 -0
  539. data/windows/zlib, libpng/zlib/zconf.h +332 -0
  540. data/windows/zlib, libpng/zlib/zconf.in.h +332 -0
  541. data/windows/zlib, libpng/zlib/zlib.3 +159 -0
  542. data/windows/zlib, libpng/zlib/zlib.h +1357 -0
  543. data/windows/zlib, libpng/zlib/zutil.c +318 -0
  544. data/windows/zlib, libpng/zlib/zutil.h +269 -0
  545. metadata +669 -216
@@ -0,0 +1,23 @@
1
+ //{{NO_DEPENDENCIES}}
2
+ // Microsoft Developer Studio generated include file.
3
+ // Used by VisualPng.rc
4
+ //
5
+ #define IDM_FILE_OPEN 40001
6
+ #define IDM_FILE_SAVE 40002
7
+ #define IDM_FILE_NEXT 40003
8
+ #define IDM_FILE_PREVIOUS 40004
9
+ #define IDM_FILE_EXIT 40005
10
+ #define IDM_OPTIONS_BACKGROUND 40006
11
+ #define IDM_OPTIONS_STRETCH 40007
12
+ #define IDM_HELP_ABOUT 40008
13
+
14
+ // Next default values for new objects
15
+ //
16
+ #ifdef APSTUDIO_INVOKED
17
+ #ifndef APSTUDIO_READONLY_SYMBOLS
18
+ #define _APS_NEXT_RESOURCE_VALUE 113
19
+ #define _APS_NEXT_COMMAND_VALUE 40009
20
+ #define _APS_NEXT_CONTROL_VALUE 1001
21
+ #define _APS_NEXT_SYMED_VALUE 101
22
+ #endif
23
+ #endif
@@ -0,0 +1,814 @@
1
+
2
+ #if 0 /* in case someone actually tries to compile this */
3
+
4
+ /* example.c - an example of using libpng
5
+ * Last changed in libpng 1.2.1 December 7, 2001.
6
+ * This file has been placed in the public domain by the authors.
7
+ * Maintained 1998-2007 Glenn Randers-Pehrson
8
+ * Maintained 1996, 1997 Andreas Dilger)
9
+ * Written 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
10
+ */
11
+
12
+ /* This is an example of how to use libpng to read and write PNG files.
13
+ * The file libpng.txt is much more verbose then this. If you have not
14
+ * read it, do so first. This was designed to be a starting point of an
15
+ * implementation. This is not officially part of libpng, is hereby placed
16
+ * in the public domain, and therefore does not require a copyright notice.
17
+ *
18
+ * This file does not currently compile, because it is missing certain
19
+ * parts, like allocating memory to hold an image. You will have to
20
+ * supply these parts to get it to compile. For an example of a minimal
21
+ * working PNG reader/writer, see pngtest.c, included in this distribution;
22
+ * see also the programs in the contrib directory.
23
+ */
24
+
25
+ #include "png.h"
26
+
27
+ /* The png_jmpbuf() macro, used in error handling, became available in
28
+ * libpng version 1.0.6. If you want to be able to run your code with older
29
+ * versions of libpng, you must define the macro yourself (but only if it
30
+ * is not already defined by libpng!).
31
+ */
32
+
33
+ #ifndef png_jmpbuf
34
+ # define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
35
+ #endif
36
+
37
+ /* Check to see if a file is a PNG file using png_sig_cmp(). png_sig_cmp()
38
+ * returns zero if the image is a PNG and nonzero if it isn't a PNG.
39
+ *
40
+ * The function check_if_png() shown here, but not used, returns nonzero (true)
41
+ * if the file can be opened and is a PNG, 0 (false) otherwise.
42
+ *
43
+ * If this call is successful, and you are going to keep the file open,
44
+ * you should call png_set_sig_bytes(png_ptr, PNG_BYTES_TO_CHECK); once
45
+ * you have created the png_ptr, so that libpng knows your application
46
+ * has read that many bytes from the start of the file. Make sure you
47
+ * don't call png_set_sig_bytes() with more than 8 bytes read or give it
48
+ * an incorrect number of bytes read, or you will either have read too
49
+ * many bytes (your fault), or you are telling libpng to read the wrong
50
+ * number of magic bytes (also your fault).
51
+ *
52
+ * Many applications already read the first 2 or 4 bytes from the start
53
+ * of the image to determine the file type, so it would be easiest just
54
+ * to pass the bytes to png_sig_cmp() or even skip that if you know
55
+ * you have a PNG file, and call png_set_sig_bytes().
56
+ */
57
+ #define PNG_BYTES_TO_CHECK 4
58
+ int check_if_png(char *file_name, FILE **fp)
59
+ {
60
+ char buf[PNG_BYTES_TO_CHECK];
61
+
62
+ /* Open the prospective PNG file. */
63
+ if ((*fp = fopen(file_name, "rb")) == NULL)
64
+ return 0;
65
+
66
+ /* Read in some of the signature bytes */
67
+ if (fread(buf, 1, PNG_BYTES_TO_CHECK, *fp) != PNG_BYTES_TO_CHECK)
68
+ return 0;
69
+
70
+ /* Compare the first PNG_BYTES_TO_CHECK bytes of the signature.
71
+ Return nonzero (true) if they match */
72
+
73
+ return(!png_sig_cmp(buf, (png_size_t)0, PNG_BYTES_TO_CHECK));
74
+ }
75
+
76
+ /* Read a PNG file. You may want to return an error code if the read
77
+ * fails (depending upon the failure). There are two "prototypes" given
78
+ * here - one where we are given the filename, and we need to open the
79
+ * file, and the other where we are given an open file (possibly with
80
+ * some or all of the magic bytes read - see comments above).
81
+ */
82
+ #ifdef open_file /* prototype 1 */
83
+ void read_png(char *file_name) /* We need to open the file */
84
+ {
85
+ png_structp png_ptr;
86
+ png_infop info_ptr;
87
+ unsigned int sig_read = 0;
88
+ png_uint_32 width, height;
89
+ int bit_depth, color_type, interlace_type;
90
+ FILE *fp;
91
+
92
+ if ((fp = fopen(file_name, "rb")) == NULL)
93
+ return (ERROR);
94
+ #else no_open_file /* prototype 2 */
95
+ void read_png(FILE *fp, unsigned int sig_read) /* file is already open */
96
+ {
97
+ png_structp png_ptr;
98
+ png_infop info_ptr;
99
+ png_uint_32 width, height;
100
+ int bit_depth, color_type, interlace_type;
101
+ #endif no_open_file /* only use one prototype! */
102
+
103
+ /* Create and initialize the png_struct with the desired error handler
104
+ * functions. If you want to use the default stderr and longjump method,
105
+ * you can supply NULL for the last three parameters. We also supply the
106
+ * the compiler header file version, so that we know if the application
107
+ * was compiled with a compatible version of the library. REQUIRED
108
+ */
109
+ png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
110
+ png_voidp user_error_ptr, user_error_fn, user_warning_fn);
111
+
112
+ if (png_ptr == NULL)
113
+ {
114
+ fclose(fp);
115
+ return (ERROR);
116
+ }
117
+
118
+ /* Allocate/initialize the memory for image information. REQUIRED. */
119
+ info_ptr = png_create_info_struct(png_ptr);
120
+ if (info_ptr == NULL)
121
+ {
122
+ fclose(fp);
123
+ png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL);
124
+ return (ERROR);
125
+ }
126
+
127
+ /* Set error handling if you are using the setjmp/longjmp method (this is
128
+ * the normal method of doing things with libpng). REQUIRED unless you
129
+ * set up your own error handlers in the png_create_read_struct() earlier.
130
+ */
131
+
132
+ if (setjmp(png_jmpbuf(png_ptr)))
133
+ {
134
+ /* Free all of the memory associated with the png_ptr and info_ptr */
135
+ png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL);
136
+ fclose(fp);
137
+ /* If we get here, we had a problem reading the file */
138
+ return (ERROR);
139
+ }
140
+
141
+ /* One of the following I/O initialization methods is REQUIRED */
142
+ #ifdef streams /* PNG file I/O method 1 */
143
+ /* Set up the input control if you are using standard C streams */
144
+ png_init_io(png_ptr, fp);
145
+
146
+ #else no_streams /* PNG file I/O method 2 */
147
+ /* If you are using replacement read functions, instead of calling
148
+ * png_init_io() here you would call:
149
+ */
150
+ png_set_read_fn(png_ptr, (void *)user_io_ptr, user_read_fn);
151
+ /* where user_io_ptr is a structure you want available to the callbacks */
152
+ #endif no_streams /* Use only one I/O method! */
153
+
154
+ /* If we have already read some of the signature */
155
+ png_set_sig_bytes(png_ptr, sig_read);
156
+
157
+ #ifdef hilevel
158
+ /*
159
+ * If you have enough memory to read in the entire image at once,
160
+ * and you need to specify only transforms that can be controlled
161
+ * with one of the PNG_TRANSFORM_* bits (this presently excludes
162
+ * dithering, filling, setting background, and doing gamma
163
+ * adjustment), then you can read the entire image (including
164
+ * pixels) into the info structure with this call:
165
+ */
166
+ png_read_png(png_ptr, info_ptr, png_transforms, png_voidp_NULL);
167
+ #else
168
+ /* OK, you're doing it the hard way, with the lower-level functions */
169
+
170
+ /* The call to png_read_info() gives us all of the information from the
171
+ * PNG file before the first IDAT (image data chunk). REQUIRED
172
+ */
173
+ png_read_info(png_ptr, info_ptr);
174
+
175
+ png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type,
176
+ &interlace_type, int_p_NULL, int_p_NULL);
177
+
178
+ /* Set up the data transformations you want. Note that these are all
179
+ * optional. Only call them if you want/need them. Many of the
180
+ * transformations only work on specific types of images, and many
181
+ * are mutually exclusive.
182
+ */
183
+
184
+ /* tell libpng to strip 16 bit/color files down to 8 bits/color */
185
+ png_set_strip_16(png_ptr);
186
+
187
+ /* Strip alpha bytes from the input data without combining with the
188
+ * background (not recommended).
189
+ */
190
+ png_set_strip_alpha(png_ptr);
191
+
192
+ /* Extract multiple pixels with bit depths of 1, 2, and 4 from a single
193
+ * byte into separate bytes (useful for paletted and grayscale images).
194
+ */
195
+ png_set_packing(png_ptr);
196
+
197
+ /* Change the order of packed pixels to least significant bit first
198
+ * (not useful if you are using png_set_packing). */
199
+ png_set_packswap(png_ptr);
200
+
201
+ /* Expand paletted colors into true RGB triplets */
202
+ if (color_type == PNG_COLOR_TYPE_PALETTE)
203
+ png_set_palette_to_rgb(png_ptr);
204
+
205
+ /* Expand grayscale images to the full 8 bits from 1, 2, or 4 bits/pixel */
206
+ if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8)
207
+ png_set_gray_1_2_4_to_8(png_ptr);
208
+
209
+ /* Expand paletted or RGB images with transparency to full alpha channels
210
+ * so the data will be available as RGBA quartets.
211
+ */
212
+ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
213
+ png_set_tRNS_to_alpha(png_ptr);
214
+
215
+ /* Set the background color to draw transparent and alpha images over.
216
+ * It is possible to set the red, green, and blue components directly
217
+ * for paletted images instead of supplying a palette index. Note that
218
+ * even if the PNG file supplies a background, you are not required to
219
+ * use it - you should use the (solid) application background if it has one.
220
+ */
221
+
222
+ png_color_16 my_background, *image_background;
223
+
224
+ if (png_get_bKGD(png_ptr, info_ptr, &image_background))
225
+ png_set_background(png_ptr, image_background,
226
+ PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
227
+ else
228
+ png_set_background(png_ptr, &my_background,
229
+ PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
230
+
231
+ /* Some suggestions as to how to get a screen gamma value */
232
+
233
+ /* Note that screen gamma is the display_exponent, which includes
234
+ * the CRT_exponent and any correction for viewing conditions */
235
+ if (/* We have a user-defined screen gamma value */)
236
+ {
237
+ screen_gamma = user-defined screen_gamma;
238
+ }
239
+ /* This is one way that applications share the same screen gamma value */
240
+ else if ((gamma_str = getenv("SCREEN_GAMMA")) != NULL)
241
+ {
242
+ screen_gamma = atof(gamma_str);
243
+ }
244
+ /* If we don't have another value */
245
+ else
246
+ {
247
+ screen_gamma = 2.2; /* A good guess for a PC monitors in a dimly
248
+ lit room */
249
+ screen_gamma = 1.7 or 1.0; /* A good guess for Mac systems */
250
+ }
251
+
252
+ /* Tell libpng to handle the gamma conversion for you. The final call
253
+ * is a good guess for PC generated images, but it should be configurable
254
+ * by the user at run time by the user. It is strongly suggested that
255
+ * your application support gamma correction.
256
+ */
257
+
258
+ int intent;
259
+
260
+ if (png_get_sRGB(png_ptr, info_ptr, &intent))
261
+ png_set_gamma(png_ptr, screen_gamma, 0.45455);
262
+ else
263
+ {
264
+ double image_gamma;
265
+ if (png_get_gAMA(png_ptr, info_ptr, &image_gamma))
266
+ png_set_gamma(png_ptr, screen_gamma, image_gamma);
267
+ else
268
+ png_set_gamma(png_ptr, screen_gamma, 0.45455);
269
+ }
270
+
271
+ /* Dither RGB files down to 8 bit palette or reduce palettes
272
+ * to the number of colors available on your screen.
273
+ */
274
+ if (color_type & PNG_COLOR_MASK_COLOR)
275
+ {
276
+ int num_palette;
277
+ png_colorp palette;
278
+
279
+ /* This reduces the image to the application supplied palette */
280
+ if (/* we have our own palette */)
281
+ {
282
+ /* An array of colors to which the image should be dithered */
283
+ png_color std_color_cube[MAX_SCREEN_COLORS];
284
+
285
+ png_set_dither(png_ptr, std_color_cube, MAX_SCREEN_COLORS,
286
+ MAX_SCREEN_COLORS, png_uint_16p_NULL, 0);
287
+ }
288
+ /* This reduces the image to the palette supplied in the file */
289
+ else if (png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette))
290
+ {
291
+ png_uint_16p histogram = NULL;
292
+
293
+ png_get_hIST(png_ptr, info_ptr, &histogram);
294
+
295
+ png_set_dither(png_ptr, palette, num_palette,
296
+ max_screen_colors, histogram, 0);
297
+ }
298
+ }
299
+
300
+ /* invert monochrome files to have 0 as white and 1 as black */
301
+ png_set_invert_mono(png_ptr);
302
+
303
+ /* If you want to shift the pixel values from the range [0,255] or
304
+ * [0,65535] to the original [0,7] or [0,31], or whatever range the
305
+ * colors were originally in:
306
+ */
307
+ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_sBIT))
308
+ {
309
+ png_color_8p sig_bit;
310
+
311
+ png_get_sBIT(png_ptr, info_ptr, &sig_bit);
312
+ png_set_shift(png_ptr, sig_bit);
313
+ }
314
+
315
+ /* flip the RGB pixels to BGR (or RGBA to BGRA) */
316
+ if (color_type & PNG_COLOR_MASK_COLOR)
317
+ png_set_bgr(png_ptr);
318
+
319
+ /* swap the RGBA or GA data to ARGB or AG (or BGRA to ABGR) */
320
+ png_set_swap_alpha(png_ptr);
321
+
322
+ /* swap bytes of 16 bit files to least significant byte first */
323
+ png_set_swap(png_ptr);
324
+
325
+ /* Add filler (or alpha) byte (before/after each RGB triplet) */
326
+ png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER);
327
+
328
+ /* Turn on interlace handling. REQUIRED if you are not using
329
+ * png_read_image(). To see how to handle interlacing passes,
330
+ * see the png_read_row() method below:
331
+ */
332
+ number_passes = png_set_interlace_handling(png_ptr);
333
+
334
+ /* Optional call to gamma correct and add the background to the palette
335
+ * and update info structure. REQUIRED if you are expecting libpng to
336
+ * update the palette for you (ie you selected such a transform above).
337
+ */
338
+ png_read_update_info(png_ptr, info_ptr);
339
+
340
+ /* Allocate the memory to hold the image using the fields of info_ptr. */
341
+
342
+ /* The easiest way to read the image: */
343
+ png_bytep row_pointers[height];
344
+
345
+ for (row = 0; row < height; row++)
346
+ {
347
+ row_pointers[row] = png_malloc(png_ptr, png_get_rowbytes(png_ptr,
348
+ info_ptr));
349
+ }
350
+
351
+ /* Now it's time to read the image. One of these methods is REQUIRED */
352
+ #ifdef entire /* Read the entire image in one go */
353
+ png_read_image(png_ptr, row_pointers);
354
+
355
+ #else no_entire /* Read the image one or more scanlines at a time */
356
+ /* The other way to read images - deal with interlacing: */
357
+
358
+ for (pass = 0; pass < number_passes; pass++)
359
+ {
360
+ #ifdef single /* Read the image a single row at a time */
361
+ for (y = 0; y < height; y++)
362
+ {
363
+ png_read_rows(png_ptr, &row_pointers[y], png_bytepp_NULL, 1);
364
+ }
365
+
366
+ #else no_single /* Read the image several rows at a time */
367
+ for (y = 0; y < height; y += number_of_rows)
368
+ {
369
+ #ifdef sparkle /* Read the image using the "sparkle" effect. */
370
+ png_read_rows(png_ptr, &row_pointers[y], png_bytepp_NULL,
371
+ number_of_rows);
372
+ #else no_sparkle /* Read the image using the "rectangle" effect */
373
+ png_read_rows(png_ptr, png_bytepp_NULL, &row_pointers[y],
374
+ number_of_rows);
375
+ #endif no_sparkle /* use only one of these two methods */
376
+ }
377
+
378
+ /* if you want to display the image after every pass, do
379
+ so here */
380
+ #endif no_single /* use only one of these two methods */
381
+ }
382
+ #endif no_entire /* use only one of these two methods */
383
+
384
+ /* read rest of file, and get additional chunks in info_ptr - REQUIRED */
385
+ png_read_end(png_ptr, info_ptr);
386
+ #endif hilevel
387
+
388
+ /* At this point you have read the entire image */
389
+
390
+ /* clean up after the read, and free any memory allocated - REQUIRED */
391
+ png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL);
392
+
393
+ /* close the file */
394
+ fclose(fp);
395
+
396
+ /* that's it */
397
+ return (OK);
398
+ }
399
+
400
+ /* progressively read a file */
401
+
402
+ int
403
+ initialize_png_reader(png_structp *png_ptr, png_infop *info_ptr)
404
+ {
405
+ /* Create and initialize the png_struct with the desired error handler
406
+ * functions. If you want to use the default stderr and longjump method,
407
+ * you can supply NULL for the last three parameters. We also check that
408
+ * the library version is compatible in case we are using dynamically
409
+ * linked libraries.
410
+ */
411
+ *png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
412
+ png_voidp user_error_ptr, user_error_fn, user_warning_fn);
413
+
414
+ if (*png_ptr == NULL)
415
+ {
416
+ *info_ptr = NULL;
417
+ return (ERROR);
418
+ }
419
+
420
+ *info_ptr = png_create_info_struct(png_ptr);
421
+
422
+ if (*info_ptr == NULL)
423
+ {
424
+ png_destroy_read_struct(png_ptr, info_ptr, png_infopp_NULL);
425
+ return (ERROR);
426
+ }
427
+
428
+ if (setjmp(png_jmpbuf((*png_ptr))))
429
+ {
430
+ png_destroy_read_struct(png_ptr, info_ptr, png_infopp_NULL);
431
+ return (ERROR);
432
+ }
433
+
434
+ /* This one's new. You will need to provide all three
435
+ * function callbacks, even if you aren't using them all.
436
+ * If you aren't using all functions, you can specify NULL
437
+ * parameters. Even when all three functions are NULL,
438
+ * you need to call png_set_progressive_read_fn().
439
+ * These functions shouldn't be dependent on global or
440
+ * static variables if you are decoding several images
441
+ * simultaneously. You should store stream specific data
442
+ * in a separate struct, given as the second parameter,
443
+ * and retrieve the pointer from inside the callbacks using
444
+ * the function png_get_progressive_ptr(png_ptr).
445
+ */
446
+ png_set_progressive_read_fn(*png_ptr, (void *)stream_data,
447
+ info_callback, row_callback, end_callback);
448
+
449
+ return (OK);
450
+ }
451
+
452
+ int
453
+ process_data(png_structp *png_ptr, png_infop *info_ptr,
454
+ png_bytep buffer, png_uint_32 length)
455
+ {
456
+ if (setjmp(png_jmpbuf((*png_ptr))))
457
+ {
458
+ /* Free the png_ptr and info_ptr memory on error */
459
+ png_destroy_read_struct(png_ptr, info_ptr, png_infopp_NULL);
460
+ return (ERROR);
461
+ }
462
+
463
+ /* This one's new also. Simply give it chunks of data as
464
+ * they arrive from the data stream (in order, of course).
465
+ * On Segmented machines, don't give it any more than 64K.
466
+ * The library seems to run fine with sizes of 4K, although
467
+ * you can give it much less if necessary (I assume you can
468
+ * give it chunks of 1 byte, but I haven't tried with less
469
+ * than 256 bytes yet). When this function returns, you may
470
+ * want to display any rows that were generated in the row
471
+ * callback, if you aren't already displaying them there.
472
+ */
473
+ png_process_data(*png_ptr, *info_ptr, buffer, length);
474
+ return (OK);
475
+ }
476
+
477
+ info_callback(png_structp png_ptr, png_infop info)
478
+ {
479
+ /* do any setup here, including setting any of the transformations
480
+ * mentioned in the Reading PNG files section. For now, you _must_
481
+ * call either png_start_read_image() or png_read_update_info()
482
+ * after all the transformations are set (even if you don't set
483
+ * any). You may start getting rows before png_process_data()
484
+ * returns, so this is your last chance to prepare for that.
485
+ */
486
+ }
487
+
488
+ row_callback(png_structp png_ptr, png_bytep new_row,
489
+ png_uint_32 row_num, int pass)
490
+ {
491
+ /*
492
+ * This function is called for every row in the image. If the
493
+ * image is interlaced, and you turned on the interlace handler,
494
+ * this function will be called for every row in every pass.
495
+ *
496
+ * In this function you will receive a pointer to new row data from
497
+ * libpng called new_row that is to replace a corresponding row (of
498
+ * the same data format) in a buffer allocated by your application.
499
+ *
500
+ * The new row data pointer new_row may be NULL, indicating there is
501
+ * no new data to be replaced (in cases of interlace loading).
502
+ *
503
+ * If new_row is not NULL then you need to call
504
+ * png_progressive_combine_row() to replace the corresponding row as
505
+ * shown below:
506
+ */
507
+ /* Check if row_num is in bounds. */
508
+ if((row_num >= 0) && (row_num < height))
509
+ {
510
+ /* Get pointer to corresponding row in our
511
+ * PNG read buffer.
512
+ */
513
+ png_bytep old_row = ((png_bytep *)our_data)[row_num];
514
+
515
+ /* If both rows are allocated then copy the new row
516
+ * data to the corresponding row data.
517
+ */
518
+ if((old_row != NULL) && (new_row != NULL))
519
+ png_progressive_combine_row(png_ptr, old_row, new_row);
520
+ }
521
+ /*
522
+ * The rows and passes are called in order, so you don't really
523
+ * need the row_num and pass, but I'm supplying them because it
524
+ * may make your life easier.
525
+ *
526
+ * For the non-NULL rows of interlaced images, you must call
527
+ * png_progressive_combine_row() passing in the new row and the
528
+ * old row, as demonstrated above. You can call this function for
529
+ * NULL rows (it will just return) and for non-interlaced images
530
+ * (it just does the png_memcpy for you) if it will make the code
531
+ * easier. Thus, you can just do this for all cases:
532
+ */
533
+
534
+ png_progressive_combine_row(png_ptr, old_row, new_row);
535
+
536
+ /* where old_row is what was displayed for previous rows. Note
537
+ * that the first pass (pass == 0 really) will completely cover
538
+ * the old row, so the rows do not have to be initialized. After
539
+ * the first pass (and only for interlaced images), you will have
540
+ * to pass the current row as new_row, and the function will combine
541
+ * the old row and the new row.
542
+ */
543
+ }
544
+
545
+ end_callback(png_structp png_ptr, png_infop info)
546
+ {
547
+ /* this function is called when the whole image has been read,
548
+ * including any chunks after the image (up to and including
549
+ * the IEND). You will usually have the same info chunk as you
550
+ * had in the header, although some data may have been added
551
+ * to the comments and time fields.
552
+ *
553
+ * Most people won't do much here, perhaps setting a flag that
554
+ * marks the image as finished.
555
+ */
556
+ }
557
+
558
+ /* write a png file */
559
+ void write_png(char *file_name /* , ... other image information ... */)
560
+ {
561
+ FILE *fp;
562
+ png_structp png_ptr;
563
+ png_infop info_ptr;
564
+ png_colorp palette;
565
+
566
+ /* open the file */
567
+ fp = fopen(file_name, "wb");
568
+ if (fp == NULL)
569
+ return (ERROR);
570
+
571
+ /* Create and initialize the png_struct with the desired error handler
572
+ * functions. If you want to use the default stderr and longjump method,
573
+ * you can supply NULL for the last three parameters. We also check that
574
+ * the library version is compatible with the one used at compile time,
575
+ * in case we are using dynamically linked libraries. REQUIRED.
576
+ */
577
+ png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,
578
+ png_voidp user_error_ptr, user_error_fn, user_warning_fn);
579
+
580
+ if (png_ptr == NULL)
581
+ {
582
+ fclose(fp);
583
+ return (ERROR);
584
+ }
585
+
586
+ /* Allocate/initialize the image information data. REQUIRED */
587
+ info_ptr = png_create_info_struct(png_ptr);
588
+ if (info_ptr == NULL)
589
+ {
590
+ fclose(fp);
591
+ png_destroy_write_struct(&png_ptr, png_infopp_NULL);
592
+ return (ERROR);
593
+ }
594
+
595
+ /* Set error handling. REQUIRED if you aren't supplying your own
596
+ * error handling functions in the png_create_write_struct() call.
597
+ */
598
+ if (setjmp(png_jmpbuf(png_ptr)))
599
+ {
600
+ /* If we get here, we had a problem reading the file */
601
+ fclose(fp);
602
+ png_destroy_write_struct(&png_ptr, &info_ptr);
603
+ return (ERROR);
604
+ }
605
+
606
+ /* One of the following I/O initialization functions is REQUIRED */
607
+ #ifdef streams /* I/O initialization method 1 */
608
+ /* set up the output control if you are using standard C streams */
609
+ png_init_io(png_ptr, fp);
610
+ #else no_streams /* I/O initialization method 2 */
611
+ /* If you are using replacement read functions, instead of calling
612
+ * png_init_io() here you would call */
613
+ png_set_write_fn(png_ptr, (void *)user_io_ptr, user_write_fn,
614
+ user_IO_flush_function);
615
+ /* where user_io_ptr is a structure you want available to the callbacks */
616
+ #endif no_streams /* only use one initialization method */
617
+
618
+ #ifdef hilevel
619
+ /* This is the easy way. Use it if you already have all the
620
+ * image info living info in the structure. You could "|" many
621
+ * PNG_TRANSFORM flags into the png_transforms integer here.
622
+ */
623
+ png_write_png(png_ptr, info_ptr, png_transforms, png_voidp_NULL);
624
+ #else
625
+ /* This is the hard way */
626
+
627
+ /* Set the image information here. Width and height are up to 2^31,
628
+ * bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on
629
+ * the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY,
630
+ * PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB,
631
+ * or PNG_COLOR_TYPE_RGB_ALPHA. interlace is either PNG_INTERLACE_NONE or
632
+ * PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST
633
+ * currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE. REQUIRED
634
+ */
635
+ png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, PNG_COLOR_TYPE_???,
636
+ PNG_INTERLACE_????, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
637
+
638
+ /* set the palette if there is one. REQUIRED for indexed-color images */
639
+ palette = (png_colorp)png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH
640
+ * png_sizeof (png_color));
641
+ /* ... set palette colors ... */
642
+ png_set_PLTE(png_ptr, info_ptr, palette, PNG_MAX_PALETTE_LENGTH);
643
+ /* You must not free palette here, because png_set_PLTE only makes a link to
644
+ the palette that you malloced. Wait until you are about to destroy
645
+ the png structure. */
646
+
647
+ /* optional significant bit chunk */
648
+ /* if we are dealing with a grayscale image then */
649
+ sig_bit.gray = true_bit_depth;
650
+ /* otherwise, if we are dealing with a color image then */
651
+ sig_bit.red = true_red_bit_depth;
652
+ sig_bit.green = true_green_bit_depth;
653
+ sig_bit.blue = true_blue_bit_depth;
654
+ /* if the image has an alpha channel then */
655
+ sig_bit.alpha = true_alpha_bit_depth;
656
+ png_set_sBIT(png_ptr, info_ptr, sig_bit);
657
+
658
+
659
+ /* Optional gamma chunk is strongly suggested if you have any guess
660
+ * as to the correct gamma of the image.
661
+ */
662
+ png_set_gAMA(png_ptr, info_ptr, gamma);
663
+
664
+ /* Optionally write comments into the image */
665
+ text_ptr[0].key = "Title";
666
+ text_ptr[0].text = "Mona Lisa";
667
+ text_ptr[0].compression = PNG_TEXT_COMPRESSION_NONE;
668
+ text_ptr[1].key = "Author";
669
+ text_ptr[1].text = "Leonardo DaVinci";
670
+ text_ptr[1].compression = PNG_TEXT_COMPRESSION_NONE;
671
+ text_ptr[2].key = "Description";
672
+ text_ptr[2].text = "<long text>";
673
+ text_ptr[2].compression = PNG_TEXT_COMPRESSION_zTXt;
674
+ #ifdef PNG_iTXt_SUPPORTED
675
+ text_ptr[0].lang = NULL;
676
+ text_ptr[1].lang = NULL;
677
+ text_ptr[2].lang = NULL;
678
+ #endif
679
+ png_set_text(png_ptr, info_ptr, text_ptr, 3);
680
+
681
+ /* other optional chunks like cHRM, bKGD, tRNS, tIME, oFFs, pHYs, */
682
+ /* note that if sRGB is present the gAMA and cHRM chunks must be ignored
683
+ * on read and must be written in accordance with the sRGB profile */
684
+
685
+ /* Write the file header information. REQUIRED */
686
+ png_write_info(png_ptr, info_ptr);
687
+
688
+ /* If you want, you can write the info in two steps, in case you need to
689
+ * write your private chunk ahead of PLTE:
690
+ *
691
+ * png_write_info_before_PLTE(write_ptr, write_info_ptr);
692
+ * write_my_chunk();
693
+ * png_write_info(png_ptr, info_ptr);
694
+ *
695
+ * However, given the level of known- and unknown-chunk support in 1.1.0
696
+ * and up, this should no longer be necessary.
697
+ */
698
+
699
+ /* Once we write out the header, the compression type on the text
700
+ * chunks gets changed to PNG_TEXT_COMPRESSION_NONE_WR or
701
+ * PNG_TEXT_COMPRESSION_zTXt_WR, so it doesn't get written out again
702
+ * at the end.
703
+ */
704
+
705
+ /* set up the transformations you want. Note that these are
706
+ * all optional. Only call them if you want them.
707
+ */
708
+
709
+ /* invert monochrome pixels */
710
+ png_set_invert_mono(png_ptr);
711
+
712
+ /* Shift the pixels up to a legal bit depth and fill in
713
+ * as appropriate to correctly scale the image.
714
+ */
715
+ png_set_shift(png_ptr, &sig_bit);
716
+
717
+ /* pack pixels into bytes */
718
+ png_set_packing(png_ptr);
719
+
720
+ /* swap location of alpha bytes from ARGB to RGBA */
721
+ png_set_swap_alpha(png_ptr);
722
+
723
+ /* Get rid of filler (OR ALPHA) bytes, pack XRGB/RGBX/ARGB/RGBA into
724
+ * RGB (4 channels -> 3 channels). The second parameter is not used.
725
+ */
726
+ png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
727
+
728
+ /* flip BGR pixels to RGB */
729
+ png_set_bgr(png_ptr);
730
+
731
+ /* swap bytes of 16-bit files to most significant byte first */
732
+ png_set_swap(png_ptr);
733
+
734
+ /* swap bits of 1, 2, 4 bit packed pixel formats */
735
+ png_set_packswap(png_ptr);
736
+
737
+ /* turn on interlace handling if you are not using png_write_image() */
738
+ if (interlacing)
739
+ number_passes = png_set_interlace_handling(png_ptr);
740
+ else
741
+ number_passes = 1;
742
+
743
+ /* The easiest way to write the image (you may have a different memory
744
+ * layout, however, so choose what fits your needs best). You need to
745
+ * use the first method if you aren't handling interlacing yourself.
746
+ */
747
+ png_uint_32 k, height, width;
748
+ png_byte image[height][width*bytes_per_pixel];
749
+ png_bytep row_pointers[height];
750
+
751
+ if (height > PNG_UINT_32_MAX/png_sizeof(png_bytep))
752
+ png_error (png_ptr, "Image is too tall to process in memory");
753
+
754
+ for (k = 0; k < height; k++)
755
+ row_pointers[k] = image + k*width*bytes_per_pixel;
756
+
757
+ /* One of the following output methods is REQUIRED */
758
+ #ifdef entire /* write out the entire image data in one call */
759
+ png_write_image(png_ptr, row_pointers);
760
+
761
+ /* the other way to write the image - deal with interlacing */
762
+
763
+ #else no_entire /* write out the image data by one or more scanlines */
764
+ /* The number of passes is either 1 for non-interlaced images,
765
+ * or 7 for interlaced images.
766
+ */
767
+ for (pass = 0; pass < number_passes; pass++)
768
+ {
769
+ /* Write a few rows at a time. */
770
+ png_write_rows(png_ptr, &row_pointers[first_row], number_of_rows);
771
+
772
+ /* If you are only writing one row at a time, this works */
773
+ for (y = 0; y < height; y++)
774
+ {
775
+ png_write_rows(png_ptr, &row_pointers[y], 1);
776
+ }
777
+ }
778
+ #endif no_entire /* use only one output method */
779
+
780
+ /* You can write optional chunks like tEXt, zTXt, and tIME at the end
781
+ * as well. Shouldn't be necessary in 1.1.0 and up as all the public
782
+ * chunks are supported and you can use png_set_unknown_chunks() to
783
+ * register unknown chunks into the info structure to be written out.
784
+ */
785
+
786
+ /* It is REQUIRED to call this to finish writing the rest of the file */
787
+ png_write_end(png_ptr, info_ptr);
788
+ #endif hilevel
789
+
790
+ /* If you png_malloced a palette, free it here (don't free info_ptr->palette,
791
+ as recommended in versions 1.0.5m and earlier of this example; if
792
+ libpng mallocs info_ptr->palette, libpng will free it). If you
793
+ allocated it with malloc() instead of png_malloc(), use free() instead
794
+ of png_free(). */
795
+ png_free(png_ptr, palette);
796
+ palette=NULL;
797
+
798
+ /* Similarly, if you png_malloced any data that you passed in with
799
+ png_set_something(), such as a hist or trans array, free it here,
800
+ when you can be sure that libpng is through with it. */
801
+ png_free(png_ptr, trans);
802
+ trans=NULL;
803
+
804
+ /* clean up after the write, and free any memory allocated */
805
+ png_destroy_write_struct(&png_ptr, &info_ptr);
806
+
807
+ /* close the file */
808
+ fclose(fp);
809
+
810
+ /* that's it */
811
+ return (OK);
812
+ }
813
+
814
+ #endif /* if 0 */