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