15 #define PNG_NO_PEDANTIC_WARNINGS 17 #ifdef PNG_PROGRESSIVE_READ_SUPPORTED 20 #define PNG_READ_SIG_MODE 0 21 #define PNG_READ_CHUNK_MODE 1 22 #define PNG_READ_IDAT_MODE 2 23 #define PNG_SKIP_MODE 3 24 #define PNG_READ_tEXt_MODE 4 25 #define PNG_READ_zTXt_MODE 5 26 #define PNG_READ_DONE_MODE 6 27 #define PNG_READ_iTXt_MODE 7 28 #define PNG_ERROR_MODE 8 34 if (png_ptr ==
NULL || info_ptr ==
NULL)
39 while (png_ptr->buffer_size)
54 switch (png_ptr->process_mode)
82 png_ptr->buffer_size = 0;
111 if (num_checked < 4 &&
115 png_error(png_ptr,
"PNG file corrupted by ASCII conversion");
119 if (png_ptr->sig_bytes >= 8)
129 #ifdef PNG_USE_LOCAL_ARRAYS 134 #ifdef PNG_READ_bKGD_SUPPORTED 137 #ifdef PNG_READ_cHRM_SUPPORTED 140 #ifdef PNG_READ_gAMA_SUPPORTED 143 #ifdef PNG_READ_hIST_SUPPORTED 146 #ifdef PNG_READ_iCCP_SUPPORTED 149 #ifdef PNG_READ_iTXt_SUPPORTED 152 #ifdef PNG_READ_oFFs_SUPPORTED 155 #ifdef PNG_READ_pCAL_SUPPORTED 158 #ifdef PNG_READ_pHYs_SUPPORTED 161 #ifdef PNG_READ_sBIT_SUPPORTED 164 #ifdef PNG_READ_sCAL_SUPPORTED 167 #ifdef PNG_READ_sRGB_SUPPORTED 170 #ifdef PNG_READ_sPLT_SUPPORTED 173 #ifdef PNG_READ_tEXt_SUPPORTED 176 #ifdef PNG_READ_tIME_SUPPORTED 179 #ifdef PNG_READ_tRNS_SUPPORTED 182 #ifdef PNG_READ_zTXt_SUPPORTED 193 if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER))
197 if (png_ptr->buffer_size < 8)
208 png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
211 if (!
png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
213 png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
215 if (!
png_memcmp(png_ptr->chunk_name, png_IHDR, 4))
217 if (png_ptr->push_length != 13)
218 png_error(png_ptr,
"Invalid IHDR length");
220 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
229 else if (!
png_memcmp(png_ptr->chunk_name, png_IEND, 4))
231 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
243 #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED 246 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
252 if (!
png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
257 if (!
png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
260 else if (!
png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
263 png_error(png_ptr,
"Missing IHDR before IDAT");
267 png_error(png_ptr,
"Missing PLTE before IDAT");
272 else if (!
png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
274 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
282 else if (!
png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
290 png_error(png_ptr,
"Missing IHDR before IDAT");
294 png_error(png_ptr,
"Missing PLTE before IDAT");
298 if (!(png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT))
299 if (png_ptr->push_length == 0)
303 png_error(png_ptr,
"Too many IDAT's found");
306 png_ptr->idat_size = png_ptr->push_length;
310 png_ptr->zstream.avail_out =
311 (
uInt) PNG_ROWBYTES(png_ptr->pixel_depth,
312 png_ptr->iwidth) + 1;
313 png_ptr->zstream.next_out = png_ptr->row_buf;
317 #ifdef PNG_READ_gAMA_SUPPORTED 318 else if (!
png_memcmp(png_ptr->chunk_name, png_gAMA, 4))
320 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
330 #ifdef PNG_READ_sBIT_SUPPORTED 331 else if (!
png_memcmp(png_ptr->chunk_name, png_sBIT, 4))
333 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
343 #ifdef PNG_READ_cHRM_SUPPORTED 344 else if (!
png_memcmp(png_ptr->chunk_name, png_cHRM, 4))
346 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
356 #ifdef PNG_READ_sRGB_SUPPORTED 357 else if (!
png_memcmp(png_ptr->chunk_name, png_sRGB, 4))
359 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
369 #ifdef PNG_READ_iCCP_SUPPORTED 370 else if (!
png_memcmp(png_ptr->chunk_name, png_iCCP, 4))
372 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
382 #ifdef PNG_READ_sPLT_SUPPORTED 383 else if (!
png_memcmp(png_ptr->chunk_name, png_sPLT, 4))
385 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
395 #ifdef PNG_READ_tRNS_SUPPORTED 396 else if (!
png_memcmp(png_ptr->chunk_name, png_tRNS, 4))
398 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
408 #ifdef PNG_READ_bKGD_SUPPORTED 409 else if (!
png_memcmp(png_ptr->chunk_name, png_bKGD, 4))
411 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
421 #ifdef PNG_READ_hIST_SUPPORTED 422 else if (!
png_memcmp(png_ptr->chunk_name, png_hIST, 4))
424 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
434 #ifdef PNG_READ_pHYs_SUPPORTED 435 else if (!
png_memcmp(png_ptr->chunk_name, png_pHYs, 4))
437 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
447 #ifdef PNG_READ_oFFs_SUPPORTED 448 else if (!
png_memcmp(png_ptr->chunk_name, png_oFFs, 4))
450 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
460 #ifdef PNG_READ_pCAL_SUPPORTED 461 else if (!
png_memcmp(png_ptr->chunk_name, png_pCAL, 4))
463 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
473 #ifdef PNG_READ_sCAL_SUPPORTED 474 else if (!
png_memcmp(png_ptr->chunk_name, png_sCAL, 4))
476 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
486 #ifdef PNG_READ_tIME_SUPPORTED 487 else if (!
png_memcmp(png_ptr->chunk_name, png_tIME, 4))
489 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
499 #ifdef PNG_READ_tEXt_SUPPORTED 500 else if (!
png_memcmp(png_ptr->chunk_name, png_tEXt, 4))
502 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
512 #ifdef PNG_READ_zTXt_SUPPORTED 513 else if (!
png_memcmp(png_ptr->chunk_name, png_zTXt, 4))
515 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
525 #ifdef PNG_READ_iTXt_SUPPORTED 526 else if (!
png_memcmp(png_ptr->chunk_name, png_iTXt, 4))
528 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
534 png_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length);
540 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
548 png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
555 png_ptr->skip_length =
skip;
561 if (png_ptr->skip_length && png_ptr->save_buffer_size)
565 if (png_ptr->skip_length < (
png_uint_32)png_ptr->save_buffer_size)
568 save_size = png_ptr->save_buffer_size;
572 png_ptr->skip_length -= save_size;
573 png_ptr->buffer_size -= save_size;
574 png_ptr->save_buffer_size -= save_size;
575 png_ptr->save_buffer_ptr += save_size;
577 if (png_ptr->skip_length && png_ptr->current_buffer_size)
581 if (png_ptr->skip_length < (
png_uint_32)png_ptr->current_buffer_size)
584 save_size = png_ptr->current_buffer_size;
588 png_ptr->skip_length -= save_size;
589 png_ptr->buffer_size -= save_size;
590 png_ptr->current_buffer_size -= save_size;
591 png_ptr->current_buffer_ptr += save_size;
593 if (!png_ptr->skip_length)
595 if (png_ptr->buffer_size < 4)
615 if (png_ptr->save_buffer_size)
622 save_size = png_ptr->save_buffer_size;
624 png_memcpy(ptr, png_ptr->save_buffer_ptr, save_size);
627 png_ptr->buffer_size -= save_size;
628 png_ptr->save_buffer_size -= save_size;
629 png_ptr->save_buffer_ptr += save_size;
631 if (length && png_ptr->current_buffer_size)
639 save_size = png_ptr->current_buffer_size;
641 png_memcpy(ptr, png_ptr->current_buffer_ptr, save_size);
642 png_ptr->buffer_size -= save_size;
643 png_ptr->current_buffer_size -= save_size;
644 png_ptr->current_buffer_ptr += save_size;
651 if (png_ptr->save_buffer_size)
653 if (png_ptr->save_buffer_ptr != png_ptr->save_buffer)
659 istop = png_ptr->save_buffer_size;
660 for (i = 0, sp = png_ptr->save_buffer_ptr, dp = png_ptr->save_buffer;
661 i < istop; i++, sp++, dp++)
667 if (png_ptr->save_buffer_size + png_ptr->current_buffer_size >
668 png_ptr->save_buffer_max)
674 (png_ptr->current_buffer_size + 256))
676 png_error(png_ptr,
"Potential overflow of save_buffer");
679 new_max = png_ptr->save_buffer_size + png_ptr->current_buffer_size + 256;
680 old_buffer = png_ptr->save_buffer;
683 if (png_ptr->save_buffer ==
NULL)
686 png_error(png_ptr,
"Insufficient memory for save_buffer");
690 png_memcpy(png_ptr->save_buffer, old_buffer, png_ptr->save_buffer_size);
692 png_ptr->save_buffer_max = new_max;
695 if (png_ptr->current_buffer_size)
697 png_memcpy(png_ptr->save_buffer + png_ptr->save_buffer_size,
698 png_ptr->current_buffer_ptr, png_ptr->current_buffer_size);
699 png_ptr->save_buffer_size += png_ptr->current_buffer_size;
700 png_ptr->current_buffer_size = 0;
702 png_ptr->save_buffer_ptr = png_ptr->save_buffer;
703 png_ptr->buffer_size = 0;
710 png_ptr->current_buffer =
buffer;
711 png_ptr->current_buffer_size = buffer_length;
712 png_ptr->buffer_size = buffer_length + png_ptr->save_buffer_size;
713 png_ptr->current_buffer_ptr = png_ptr->current_buffer;
719 #ifdef PNG_USE_LOCAL_ARRAYS 722 if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER))
726 if (png_ptr->buffer_size < 8)
736 png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
738 if (
png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
741 if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
742 png_error(png_ptr,
"Not enough compressed data");
746 png_ptr->idat_size = png_ptr->push_length;
748 if (png_ptr->idat_size && png_ptr->save_buffer_size)
752 if (png_ptr->idat_size < (
png_uint_32)png_ptr->save_buffer_size)
758 png_error(png_ptr,
"save_size overflowed in pngpread");
761 save_size = png_ptr->save_buffer_size;
767 png_ptr->idat_size -= save_size;
768 png_ptr->buffer_size -= save_size;
769 png_ptr->save_buffer_size -= save_size;
770 png_ptr->save_buffer_ptr += save_size;
772 if (png_ptr->idat_size && png_ptr->current_buffer_size)
776 if (png_ptr->idat_size < (
png_uint_32)png_ptr->current_buffer_size)
782 png_error(png_ptr,
"save_size overflowed in pngpread");
785 save_size = png_ptr->current_buffer_size;
791 png_ptr->idat_size -= save_size;
792 png_ptr->buffer_size -= save_size;
793 png_ptr->current_buffer_size -= save_size;
794 png_ptr->current_buffer_ptr += save_size;
796 if (!png_ptr->idat_size)
798 if (png_ptr->buffer_size < 4)
805 png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
815 if (!(buffer_length > 0) || buffer ==
NULL)
816 png_error(png_ptr,
"No IDAT data (internal error)");
822 png_ptr->zstream.next_in =
buffer;
823 png_ptr->zstream.avail_in = (
uInt)buffer_length;
828 while (png_ptr->zstream.avail_in > 0 &&
829 !(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
838 if (!(png_ptr->zstream.avail_out > 0))
840 png_ptr->zstream.avail_out =
841 (
uInt) PNG_ROWBYTES(png_ptr->pixel_depth,
842 png_ptr->iwidth) + 1;
843 png_ptr->zstream.next_out = png_ptr->row_buf;
859 png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
864 if (png_ptr->row_number >= png_ptr->num_rows ||
866 png_warning(png_ptr,
"Truncated compressed data in IDAT");
868 png_error(png_ptr,
"Decompression error in IDAT");
875 if (png_ptr->zstream.next_out != png_ptr->row_buf)
881 if (png_ptr->row_number >= png_ptr->num_rows ||
885 png_warning(png_ptr,
"Extra compressed data in IDAT");
886 png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
894 if (png_ptr->zstream.avail_out == 0)
900 png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
907 if (png_ptr->zstream.avail_in > 0)
914 png_ptr->row_info.color_type = png_ptr->color_type;
915 png_ptr->row_info.width = png_ptr->iwidth;
916 png_ptr->row_info.channels = png_ptr->channels;
917 png_ptr->row_info.bit_depth = png_ptr->bit_depth;
918 png_ptr->row_info.pixel_depth = png_ptr->pixel_depth;
920 png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth,
921 png_ptr->row_info.width);
924 png_ptr->row_buf + 1, png_ptr->prev_row + 1,
925 (
int)(png_ptr->row_buf[0]));
928 png_ptr->rowbytes + 1);
930 if (png_ptr->transformations || (png_ptr->flags&PNG_FLAG_STRIP_ALPHA))
933 #ifdef PNG_READ_INTERLACING_SUPPORTED 935 if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE))
937 if (png_ptr->pass < 6)
944 switch (png_ptr->pass)
949 for (i = 0; i < 8 && png_ptr->pass == 0; i++)
955 if (png_ptr->pass == 2)
957 for (i = 0; i < 4 && png_ptr->pass == 2; i++)
964 if (png_ptr->pass == 4 && png_ptr->height <= 4)
966 for (i = 0; i < 2 && png_ptr->pass == 4; i++)
973 if (png_ptr->pass == 6 && png_ptr->height <= 4)
985 for (i = 0; i < 8 && png_ptr->pass == 1; i++)
991 if (png_ptr->pass == 2)
993 for (i = 0; i < 4 && png_ptr->pass == 2; i++)
1007 for (i = 0; i < 4 && png_ptr->pass == 2; i++)
1013 for (i = 0; i < 4 && png_ptr->pass == 2; i++)
1019 if (png_ptr->pass == 4)
1021 for (i = 0; i < 2 && png_ptr->pass == 4; i++)
1035 for (i = 0; i < 4 && png_ptr->pass == 3; i++)
1041 if (png_ptr->pass == 4)
1043 for (i = 0; i < 2 && png_ptr->pass == 4; i++)
1057 for (i = 0; i < 2 && png_ptr->pass == 4; i++)
1063 for (i = 0; i < 2 && png_ptr->pass == 4; i++)
1069 if (png_ptr->pass == 6)
1082 for (i = 0; i < 2 && png_ptr->pass == 5; i++)
1088 if (png_ptr->pass == 6)
1101 if (png_ptr->pass != 6)
1120 #ifdef PNG_USE_LOCAL_ARRAYS 1141 png_ptr->row_number++;
1142 if (png_ptr->row_number < png_ptr->num_rows)
1145 #ifdef PNG_READ_INTERLACING_SUPPORTED 1146 if (png_ptr->interlaced)
1148 png_ptr->row_number = 0;
1150 png_ptr->rowbytes + 1);
1154 if ((png_ptr->pass == 1 && png_ptr->width < 5) ||
1155 (png_ptr->pass == 3 && png_ptr->width < 3) ||
1156 (png_ptr->pass == 5 && png_ptr->width < 2))
1159 if (png_ptr->pass > 7)
1162 if (png_ptr->pass >= 7)
1165 png_ptr->iwidth = (png_ptr->width +
1166 png_pass_inc[png_ptr->pass] - 1 -
1167 png_pass_start[png_ptr->pass]) /
1168 png_pass_inc[png_ptr->pass];
1170 if (png_ptr->transformations & PNG_INTERLACE)
1173 png_ptr->num_rows = (png_ptr->height +
1174 png_pass_yinc[png_ptr->pass] - 1 -
1175 png_pass_ystart[png_ptr->pass]) /
1176 png_pass_yinc[png_ptr->pass];
1178 }
while (png_ptr->iwidth == 0 || png_ptr->num_rows == 0);
1186 if (png_ptr->info_fn !=
NULL)
1187 (*(png_ptr->info_fn))(png_ptr,
info_ptr);
1193 if (png_ptr->end_fn !=
NULL)
1194 (*(png_ptr->end_fn))(png_ptr,
info_ptr);
1200 if (png_ptr->row_fn !=
NULL)
1201 (*(png_ptr->row_fn))(png_ptr,
row, png_ptr->row_number,
1202 (
int)png_ptr->pass);
1209 #ifdef PNG_USE_LOCAL_ARRAYS 1211 {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff};
1214 if (png_ptr ==
NULL)
1217 if (new_row !=
NULL)
1223 png_progressive_info_ptr
info_fn, png_progressive_row_ptr
row_fn,
1224 png_progressive_end_ptr
end_fn)
1226 if (png_ptr ==
NULL)
1230 png_ptr->row_fn =
row_fn;
1231 png_ptr->end_fn =
end_fn;
1239 if (png_ptr ==
NULL)
1242 return png_ptr->io_ptr;
GLenum GLuint GLenum GLsizei length
void png_push_read_IDAT(png_structp png_ptr)
PNG_CONST int FARDATA png_pass_start[]
png_bytep png_bytep new_row
void png_push_have_row(png_structp png_ptr, png_bytep row)
void png_handle_IEND(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
#define PNG_READ_DONE_MODE
void PNGAPI png_process_data(png_structp png_ptr, png_infop info_ptr, png_bytep buffer, png_size_t buffer_size)
void png_push_read_sig(png_structp png_ptr, png_infop info_ptr)
void png_push_have_end(png_structp png_ptr, png_infop info_ptr)
png_voidp progressive_ptr
#define PNG_COLOR_TYPE_PALETTE
void png_handle_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
PNG_CONST int FARDATA png_pass_yinc[]
void png_handle_sPLT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
png_size_t png_size_t num_to_check
void PNGAPI png_progressive_combine_row(png_structp png_ptr, png_bytep old_row, png_bytep new_row)
png_voidp png_progressive_info_ptr png_progressive_row_ptr row_fn
void png_do_read_transformations(png_structp png_ptr)
int PNGAPI png_handle_as_unknown(png_structp png_ptr, png_bytep chunk_name)
void png_crc_read(png_structp png_ptr, png_bytep buf, png_size_t length)
PNG_CONST int FARDATA png_pass_ystart[]
png_voidp png_progressive_info_ptr info_fn
void png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
png_voidp PNGAPI png_get_progressive_ptr(png_structp png_ptr)
#define PNG_READ_IDAT_MODE
void png_push_read_chunk(png_structp png_ptr, png_infop info_ptr)
void png_calculate_crc(png_structp png_ptr, png_bytep ptr, png_size_t length)
void png_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
GLenum GLenum GLvoid * row
void png_handle_cHRM(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
void png_handle_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
void png_push_save_buffer(png_structp png_ptr)
png_struct FAR * png_structp
#define png_error(s1, s2)
void png_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
void png_push_crc_finish(png_structp png_ptr)
void png_handle_pCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
void png_do_read_interlace(png_structp png_ptr)
void PNGAPI png_warning(png_structp png_ptr, png_const_charp warning_message)
void png_combine_row(png_structp png_ptr, png_bytep row, int mask)
int ZEXPORT inflate(z_streamp strm, int flush)
PNG_CONST int FARDATA png_pass_dsp_mask[]
void png_push_crc_skip(png_structp png_ptr, png_uint_32 skip)
void png_process_IDAT_data(png_structp png_ptr, png_bytep buffer, png_size_t buffer_length)
void png_read_push_finish_row(png_structp png_ptr)
png_voidp png_progressive_info_ptr png_progressive_row_ptr png_progressive_end_ptr end_fn
void png_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
int PNGAPI png_sig_cmp(png_bytep sig, png_size_t start, png_size_t num_to_check)
#define PNG_READ_CHUNK_MODE
int png_crc_finish(png_structp png_ptr, png_uint_32 skip)
void PNGAPI png_set_read_fn(png_structp png_ptr, png_voidp io_ptr, png_rw_ptr read_data_fn)
local void skip(file *in, unsigned n)
png_uint_32 PNGAPI png_get_uint_31(png_structp png_ptr, png_bytep buf)
void png_handle_tRNS(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
if(!abbox) return FT_THROW(Invalid_Argument)
void png_push_restore_buffer(png_structp png_ptr, png_bytep buffer, png_size_t buffer_length)
void png_handle_sRGB(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
PNG_CONST int FARDATA png_pass_inc[]
void png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep row, png_bytep prev_row, int filter)
png_voidp PNGAPI png_memcpy_check(png_structp png_ptr, png_voidp s1, png_voidp s2, png_uint_32 length)
png_infop png_bytep png_size_t buffer_size
void png_handle_tIME(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
void png_handle_oFFs(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
void png_process_some_data(png_structp png_ptr, png_infop info_ptr)
void PNGAPI png_push_fill_buffer(png_structp png_ptr, png_bytep buffer, png_size_t length)
void png_handle_bKGD(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
png_voidp PNGAPI png_memset_check(png_structp png_ptr, png_voidp s1, int value, png_uint_32 length)
void png_handle_gAMA(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
void png_handle_sBIT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
void png_push_process_row(png_structp png_ptr)
void png_handle_iCCP(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
void PNGAPI png_set_progressive_read_fn(png_structp png_ptr, png_voidp progressive_ptr, png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn)
unsigned long png_uint_32
#define PNG_READ_SIG_MODE
void png_handle_PLTE(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
void PNGAPI png_free(png_structp png_ptr, png_voidp ptr)
void png_push_have_info(png_structp png_ptr, png_infop info_ptr)
void png_handle_pHYs(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
void png_check_chunk_name(png_structp png_ptr, png_bytep chunk_name)
void png_reset_crc(png_structp png_ptr)
png_voidp PNGAPI png_malloc_warn(png_structp png_ptr, png_uint_32 size)