17#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) && defined(PNG_STDIO_SUPPORTED)
21#ifdef PNG_READ_SUPPORTED
26 png_error_ptr error_fn, png_error_ptr warn_fn),
29#ifndef PNG_USER_MEM_SUPPORTED
33 return png_create_read_struct_2(user_png_ver, error_ptr, error_fn,
42 png_error_ptr error_fn, png_error_ptr warn_fn,
png_voidp mem_ptr,
43 png_malloc_ptr malloc_fn, png_free_ptr free_fn),
47 error_fn, warn_fn, mem_ptr, malloc_fn, free_fn);
57# ifdef PNG_SEQUENTIAL_READ_SUPPORTED
61# ifdef PNG_BENIGN_READ_ERRORS_SUPPORTED
83#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
95#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
118 png_chunk_error(
png_ptr,
"Missing IHDR before IDAT");
122 png_chunk_error(
png_ptr,
"Missing PLTE before IDAT");
125 png_chunk_benign_error(
png_ptr,
"Too many IDATs found");
142#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
143 else if ((keep = png_chunk_unknown_handling(
png_ptr, chunk_name)) != 0)
182# ifdef PNG_READ_TRANSFORMS_SUPPORTED
192 "png_read_update_info/png_start_read_image: duplicate call");
196#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
215 "png_start_read_image/png_read_update_info: duplicate call");
220#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
221#ifdef PNG_MNG_FEATURES_SUPPORTED
228 png_debug(1,
"in png_do_read_intrapixel");
250 for (
i = 0, rp =
row;
i < row_width;
i++, rp += bytes_per_pixel)
252 *(rp) = (png_byte)((256 + *rp + *(rp + 1)) & 0xff);
253 *(rp+2) = (png_byte)((256 + *(rp + 2) + *(rp + 1)) & 0xff);
270 for (
i = 0, rp =
row;
i < row_width;
i++, rp += bytes_per_pixel)
277 *(rp ) = (png_byte)((
red >> 8) & 0xff);
278 *(rp + 1) = (png_byte)(
red & 0xff);
279 *(rp + 4) = (png_byte)((
blue >> 8) & 0xff);
280 *(rp + 5) = (png_byte)(
blue & 0xff);
295 png_debug2(1,
"in png_read_row (row %lu, pass %d)",
312#ifdef PNG_WARNINGS_SUPPORTED
316#if defined(PNG_WRITE_INVERT_SUPPORTED) && !defined(PNG_READ_INVERT_SUPPORTED)
318 png_warning(
png_ptr,
"PNG_READ_INVERT_SUPPORTED is not defined");
321#if defined(PNG_WRITE_FILLER_SUPPORTED) && !defined(PNG_READ_FILLER_SUPPORTED)
323 png_warning(
png_ptr,
"PNG_READ_FILLER_SUPPORTED is not defined");
326#if defined(PNG_WRITE_PACKSWAP_SUPPORTED) && \
327 !defined(PNG_READ_PACKSWAP_SUPPORTED)
329 png_warning(
png_ptr,
"PNG_READ_PACKSWAP_SUPPORTED is not defined");
332#if defined(PNG_WRITE_PACK_SUPPORTED) && !defined(PNG_READ_PACK_SUPPORTED)
334 png_warning(
png_ptr,
"PNG_READ_PACK_SUPPORTED is not defined");
337#if defined(PNG_WRITE_SHIFT_SUPPORTED) && !defined(PNG_READ_SHIFT_SUPPORTED)
339 png_warning(
png_ptr,
"PNG_READ_SHIFT_SUPPORTED is not defined");
342#if defined(PNG_WRITE_BGR_SUPPORTED) && !defined(PNG_READ_BGR_SUPPORTED)
344 png_warning(
png_ptr,
"PNG_READ_BGR_SUPPORTED is not defined");
347#if defined(PNG_WRITE_SWAP_SUPPORTED) && !defined(PNG_READ_SWAP_SUPPORTED)
349 png_warning(
png_ptr,
"PNG_READ_SWAP_SUPPORTED is not defined");
354#ifdef PNG_READ_INTERLACING_SUPPORTED
361 if (
png_ptr->interlaced != 0 &&
367 if (
png_ptr->row_number & 0x07)
370 png_combine_row(
png_ptr, dsp_row, 1);
380 png_combine_row(
png_ptr, dsp_row, 1);
388 if ((
png_ptr->row_number & 0x07) != 4)
391 png_combine_row(
png_ptr, dsp_row, 1);
402 png_combine_row(
png_ptr, dsp_row, 1);
410 if ((
png_ptr->row_number & 3) != 2)
413 png_combine_row(
png_ptr, dsp_row, 1);
424 png_combine_row(
png_ptr, dsp_row, 1);
433 if ((
png_ptr->row_number & 1) == 0)
444 png_error(
png_ptr,
"Invalid attempt to read row data");
456 png_error(
png_ptr,
"bad adaptive filter value");
466#ifdef PNG_MNG_FEATURES_SUPPORTED
471 png_do_read_intrapixel(&row_info,
png_ptr->row_buf + 1);
475#ifdef PNG_READ_TRANSFORMS_SUPPORTED
478 ||
png_ptr->num_palette_max >= 0
481 png_do_read_transformations(
png_ptr, &row_info);
485 if (
png_ptr->transformed_pixel_depth == 0)
489 png_error(
png_ptr,
"sequential row overflow");
493 png_error(
png_ptr,
"internal sequential row size calculation error");
495#ifdef PNG_READ_INTERLACING_SUPPORTED
497 if (
png_ptr->interlaced != 0 &&
501 png_do_read_interlace(&row_info,
png_ptr->row_buf + 1,
png_ptr->pass,
505 png_combine_row(
png_ptr, dsp_row, 1);
518 png_combine_row(
png_ptr, dsp_row, -1);
527#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
573 png_read_row(
png_ptr, rptr, dptr);
594#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
619#ifdef PNG_READ_INTERLACING_SUPPORTED
628 if (
png_ptr->interlaced != 0 &&
635 png_warning(
png_ptr,
"Interlace handling should be turned on when "
636 "using png_read_image");
649 "Cannot read interlaced image -- interlace handler disabled");
668#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
676#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
688#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
693#ifdef PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED
697 png_benign_error(
png_ptr,
"Read palette index exceeding num_palette");
722#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
723 else if ((keep = png_chunk_unknown_handling(
png_ptr, chunk_name)) != 0)
729 png_benign_error(
png_ptr,
".Too many IDATs found");
747 png_benign_error(
png_ptr,
"..Too many IDATs found");
764#ifdef PNG_READ_GAMMA_SUPPORTED
765 png_destroy_gamma_table(
png_ptr);
775#ifdef PNG_READ_QUANTIZE_SUPPORTED
787 png_ptr->free_me &= ~PNG_FREE_PLTE;
789#if defined(PNG_tRNS_SUPPORTED) || \
790 defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
796 png_ptr->free_me &= ~PNG_FREE_TRNS;
801#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
806#if defined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED) && \
807 defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
812#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
817#if defined(PNG_READ_EXPAND_SUPPORTED) && \
818 (defined(PNG_ARM_NEON_IMPLEMENTATION) || \
819 defined(PNG_RISCV_RVV_IMPLEMENTATION))
837 png_debug(1,
"in png_destroy_read_struct");
839 if (png_ptr_ptr !=
NULL)
849 png_destroy_info_struct(
png_ptr, end_info_ptr_ptr);
850 png_destroy_info_struct(
png_ptr, info_ptr_ptr);
854 png_destroy_png_struct(
png_ptr);
863 png_ptr->read_row_fn = read_row_fn;
867#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
868#ifdef PNG_INFO_IMAGE_SUPPORTED
883 png_error(
png_ptr,
"Image is too high to process with png_read_png()");
894 if ((transforms & PNG_TRANSFORM_SCALE_16) != 0)
898#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
909#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
919#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
929#ifdef PNG_READ_PACK_SUPPORTED
939#ifdef PNG_READ_PACKSWAP_SUPPORTED
951#ifdef PNG_READ_EXPAND_SUPPORTED
963#ifdef PNG_READ_INVERT_SUPPORTED
974#ifdef PNG_READ_SHIFT_SUPPORTED
983#ifdef PNG_READ_BGR_SUPPORTED
991#ifdef PNG_READ_SWAP_ALPHA_SUPPORTED
999#ifdef PNG_READ_SWAP_SUPPORTED
1008#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
1009 png_set_invert_alpha(
png_ptr);
1017#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
1025#ifdef PNG_READ_EXPAND_16_SUPPORTED
1054 for (iptr=0; iptr<
info_ptr->height; iptr++)
1075#ifdef PNG_SIMPLIFIED_READ_SUPPORTED
1093#define PNG_CMAP_NONE 0
1094#define PNG_CMAP_GA 1
1095#define PNG_CMAP_TRANS 2
1096#define PNG_CMAP_RGB 3
1097#define PNG_CMAP_RGB_ALPHA 4
1100#define PNG_CMAP_NONE_BACKGROUND 256
1101#define PNG_CMAP_GA_BACKGROUND 231
1102#define PNG_CMAP_TRANS_BACKGROUND 254
1103#define PNG_CMAP_RGB_BACKGROUND 256
1104#define PNG_CMAP_RGB_ALPHA_BACKGROUND 216
1111 png_int_32 row_stride;
1121 int colormap_processing;
1122} png_image_read_control;
1135 png_safe_error, png_safe_warning);
1171 return png_image_error(
image,
"png_image_read: out of memory");
1174 return png_image_error(
image,
"png_image_read: opaque pointer not NULL");
1194 else if (
png_ptr->num_trans > 0)
1207chromaticities_match_sRGB(
const png_xy *xy)
1209# define sRGB_TOLERANCE 1000
1210 static const png_xy sRGB_xy =
1243 return png_gamma_significant((
g * 11 + 2)/5 );
1263 return !chromaticities_match_sRGB(&
png_ptr->chromaticities);
1271 return !chromaticities_match_sRGB(&
png_ptr->chromaticities);
1278png_image_read_header(
png_voidp argument)
1284#ifdef PNG_BENIGN_ERRORS_SUPPORTED
1285 png_set_benign_errors(
png_ptr, 1);
1303 png_image_is_not_sRGB(
png_ptr))
1316 cmap_entries = 1U <<
png_ptr->bit_depth;
1328 if (cmap_entries > 256)
1331 image->colormap_entries = cmap_entries;
1337#ifdef PNG_STDIO_SUPPORTED
1345 if (png_image_read_init(
image) != 0)
1352 return png_safe_execute(
image, png_image_read_header,
image);
1357 return png_image_error(
image,
1358 "png_image_begin_read_from_stdio: invalid argument");
1362 return png_image_error(
image,
1363 "png_image_begin_read_from_stdio: incorrect PNG_IMAGE_VERSION");
1379 if (png_image_read_init(
image) != 0)
1381 image->opaque->png_ptr->io_ptr = fp;
1382 image->opaque->owned_file = 1;
1383 return png_safe_execute(
image, png_image_read_header,
image);
1395 return png_image_error(
image,
1396 "png_image_begin_read_from_file: invalid argument");
1400 return png_image_error(
image,
1401 "png_image_begin_read_from_file: incorrect PNG_IMAGE_VERSION");
1429 png_error(
png_ptr,
"read beyond end of data");
1433 png_error(
png_ptr,
"invalid memory read");
1444 if (png_image_read_init(
image) != 0)
1453 image->opaque->png_ptr->read_data_fn = png_image_memory_read;
1455 return png_safe_execute(
image, png_image_read_header,
image);
1460 return png_image_error(
image,
1461 "png_image_begin_read_from_memory: invalid argument");
1465 return png_image_error(
image,
1466 "png_image_begin_read_from_memory: incorrect PNG_IMAGE_VERSION");
1474#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
1495 static const png_byte chunks_to_process[] = {
1496 98, 75, 71, 68,
'\0',
1497 99, 72, 82, 77,
'\0',
1498 99, 73, 67, 80,
'\0',
1499 103, 65, 77, 65,
'\0',
1500 109, 68, 67, 86,
'\0',
1501 115, 66, 73, 84,
'\0',
1502 115, 82, 71, 66,
'\0',
1513 chunks_to_process, (
int)(
sizeof chunks_to_process)/5);
1517# define PNG_SKIP_CHUNKS(p) png_image_skip_unused_chunks(p)
1519# define PNG_SKIP_CHUNKS(p) ((void)0)
1526#define PNG_DIV51(v8) (((v8) * 5 + 130) >> 8)
1530set_file_encoding(png_image_read_control *
display)
1539 png_error(
png_ptr,
"internal: default gamma not set");
1541 if (png_gamma_significant(
g) != 0)
1543 if (png_gamma_not_sRGB(
g) != 0)
1545 display->file_encoding = P_FILE;
1546 display->gamma_to_linear = png_reciprocal(
g);
1550 display->file_encoding = P_sRGB;
1554 display->file_encoding = P_LINEAR8;
1560 if (encoding == P_FILE)
1561 encoding =
display->file_encoding;
1563 if (encoding == P_NOTSET)
1566 encoding =
display->file_encoding;
1588 png_error(
display->image->opaque->png_ptr,
1589 "unexpected encoding (internal error)");
1597png_colormap_compose(png_image_read_control *
display,
1614 if (encoding == P_LINEAR)
1621 f = (
f+32768) >> 16;
1625 f = PNG_sRGB_FROM_LINEAR(
f);
1634png_create_colormap_entry(png_image_read_control *
display,
1645 png_error(
image->opaque->png_ptr,
"color-map index out of range");
1650 if (encoding == P_FILE)
1652 if (
display->file_encoding == P_NOTSET)
1658 encoding =
display->file_encoding;
1661 if (encoding == P_FILE)
1665 red = png_gamma_16bit_correct(
red*257,
g);
1667 blue = png_gamma_16bit_correct(
blue*257,
g);
1669 if (convert_to_Y != 0 || output_encoding == P_LINEAR)
1672 encoding = P_LINEAR;
1677 red = PNG_sRGB_FROM_LINEAR(
red * 255);
1679 blue = PNG_sRGB_FROM_LINEAR(
blue * 255);
1684 else if (encoding == P_LINEAR8)
1693 encoding = P_LINEAR;
1696 else if (encoding == P_sRGB &&
1697 (convert_to_Y != 0 || output_encoding == P_LINEAR))
1702 red = png_sRGB_table[
red];
1706 encoding = P_LINEAR;
1710 if (encoding == P_LINEAR)
1712 if (convert_to_Y != 0)
1718 if (output_encoding == P_LINEAR)
1719 y = (
y + 16384) >> 15;
1726 y = PNG_sRGB_FROM_LINEAR((
y + 64) >> 7);
1734 else if (output_encoding == P_sRGB)
1736 red = PNG_sRGB_FROM_LINEAR(
red * 255);
1738 blue = PNG_sRGB_FROM_LINEAR(
blue * 255);
1744 if (encoding != output_encoding)
1745 png_error(
image->opaque->png_ptr,
"bad encoding (internal error)");
1749# ifdef PNG_FORMAT_AFIRST_SUPPORTED
1755# ifdef PNG_FORMAT_BGR_SUPPORTED
1761 if (output_encoding == P_LINEAR)
1790 entry[afirst + (2 ^ bgr)] = (png_uint_16)
blue;
1792 entry[afirst + bgr] = (png_uint_16)
red;
1828 entry[afirst + (2 ^ bgr)] = (png_byte)
blue;
1830 entry[afirst + bgr] = (png_byte)
red;
1855make_gray_file_colormap(png_image_read_control *
display)
1859 for (
i=0;
i<256; ++
i)
1860 png_create_colormap_entry(
display,
i,
i,
i,
i, 255, P_FILE);
1866make_gray_colormap(png_image_read_control *
display)
1870 for (
i=0;
i<256; ++
i)
1871 png_create_colormap_entry(
display,
i,
i,
i,
i, 255, P_sRGB);
1875#define PNG_GRAY_COLORMAP_ENTRIES 256
1878make_ga_colormap(png_image_read_control *
display)
1909 unsigned int gray = (
i * 256 + 115) / 231;
1910 png_create_colormap_entry(
display,
i++, gray, gray, gray, 255, P_sRGB);
1916 png_create_colormap_entry(
display,
i++, 255, 255, 255, 0, P_sRGB);
1923 png_create_colormap_entry(
display,
i++,
g*51,
g*51,
g*51,
a*51,
1930#define PNG_GA_COLORMAP_ENTRIES 256
1933make_rgb_colormap(png_image_read_control *
display)
1938 for (
i=
r=0;
r<6; ++
r)
1947 png_create_colormap_entry(
display,
i++,
r*51,
g*51,
b*51, 255,
1955#define PNG_RGB_COLORMAP_ENTRIES 216
1958#define PNG_RGB_INDEX(r,g,b) \
1959 ((png_byte)(6 * (6 * PNG_DIV51(r) + PNG_DIV51(g)) + PNG_DIV51(b)))
1962png_image_read_colormap(
png_voidp argument)
1964 png_image_read_control *
display =
1973 unsigned int cmap_entries;
1974 unsigned int output_processing;
1975 unsigned int data_encoding = P_NOTSET;
1980 unsigned int background_index = 256;
1984 int expand_tRNS = 0;
1995 if (output_encoding == P_LINEAR)
1996 back_b = back_g = back_r = 0;
2000 "background color must be supplied to remove alpha/transparency");
2008 back_g =
display->background->green;
2011 back_r =
display->background->red;
2012 back_b =
display->background->blue;
2015 back_b = back_r = back_g;
2019 else if (output_encoding == P_LINEAR)
2020 back_b = back_r = back_g = 65535;
2023 back_b = back_r = back_g = 255;
2034 if (
png_ptr->bit_depth == 16 &&
2054 unsigned int step,
i,
val, trans = 256, back_alpha = 0;
2056 cmap_entries = 1U <<
png_ptr->bit_depth;
2057 if (cmap_entries >
image->colormap_entries)
2058 png_error(
png_ptr,
"gray[8] color-map: too few entries");
2060 step = 255 / (cmap_entries - 1);
2061 output_processing = PNG_CMAP_NONE;
2068 trans =
png_ptr->trans_color.gray;
2071 back_alpha = output_encoding == P_LINEAR ? 65535 : 255;
2081 for (
i=
val=0;
i<cmap_entries; ++
i,
val += step)
2100 png_create_colormap_entry(
display,
i, back_r, back_g, back_b,
2101 back_alpha, output_encoding);
2105 data_encoding = P_FILE;
2134 data_encoding = P_sRGB;
2136 if (PNG_GRAY_COLORMAP_ENTRIES >
image->colormap_entries)
2137 png_error(
png_ptr,
"gray[16] color-map: too few entries");
2139 cmap_entries = (
unsigned int)make_gray_colormap(
display);
2143 unsigned int back_alpha;
2150 if (back_r == back_g && back_g == back_b)
2158 if (output_encoding == P_LINEAR)
2160 gray = PNG_sRGB_FROM_LINEAR(gray * 255);
2165 png_create_colormap_entry(
display, gray, back_g, back_g,
2166 back_g, 65535, P_LINEAR);
2173 c.gray =
c.red =
c.green =
c.blue = (png_uint_16)gray;
2183 output_processing = PNG_CMAP_NONE;
2192 back_alpha = output_encoding == P_LINEAR ? 65535 : 255;
2204 output_processing = PNG_CMAP_TRANS;
2205 background_index = 254;
2210 png_create_colormap_entry(
display, 254, back_r, back_g, back_b,
2211 back_alpha, output_encoding);
2215 output_processing = PNG_CMAP_NONE;
2230 data_encoding = P_sRGB;
2234 if (PNG_GA_COLORMAP_ENTRIES >
image->colormap_entries)
2235 png_error(
png_ptr,
"gray+alpha color-map: too few entries");
2237 cmap_entries = (
unsigned int)make_ga_colormap(
display);
2239 background_index = PNG_CMAP_GA_BACKGROUND;
2240 output_processing = PNG_CMAP_GA;
2262 (back_r == back_g && back_g == back_b))
2268 if (PNG_GRAY_COLORMAP_ENTRIES >
image->colormap_entries)
2269 png_error(
png_ptr,
"gray-alpha color-map: too few entries");
2271 cmap_entries = (
unsigned int)make_gray_colormap(
display);
2273 if (output_encoding == P_LINEAR)
2275 gray = PNG_sRGB_FROM_LINEAR(gray * 255);
2278 png_create_colormap_entry(
display, gray, back_g, back_g,
2279 back_g, 65535, P_LINEAR);
2286 c.gray =
c.red =
c.green =
c.blue = (png_uint_16)gray;
2292 output_processing = PNG_CMAP_NONE;
2302 if (PNG_GA_COLORMAP_ENTRIES >
image->colormap_entries)
2303 png_error(
png_ptr,
"ga-alpha color-map: too few entries");
2309 png_create_colormap_entry(
display,
i++, gray, gray, gray,
2316 background_index =
i;
2317 png_create_colormap_entry(
display,
i++, back_r, back_g, back_b,
2323 output_encoding == P_LINEAR ? 65535U : 255U,
2335 if (output_encoding == P_sRGB)
2341 back_r = png_sRGB_table[back_r];
2342 back_g = png_sRGB_table[back_g];
2343 back_b = png_sRGB_table[back_b];
2362 png_create_colormap_entry(
display,
i++,
2363 PNG_sRGB_FROM_LINEAR(gray + back_rx),
2364 PNG_sRGB_FROM_LINEAR(gray + back_gx),
2365 PNG_sRGB_FROM_LINEAR(gray + back_bx), 255, P_sRGB);
2370 output_processing = PNG_CMAP_GA;
2392 data_encoding = P_sRGB;
2407 if (PNG_GA_COLORMAP_ENTRIES >
image->colormap_entries)
2408 png_error(
png_ptr,
"rgb[ga] color-map: too few entries");
2410 cmap_entries = (
unsigned int)make_ga_colormap(
display);
2411 background_index = PNG_CMAP_GA_BACKGROUND;
2412 output_processing = PNG_CMAP_GA;
2423 if (PNG_GRAY_COLORMAP_ENTRIES >
image->colormap_entries)
2424 png_error(
png_ptr,
"rgb[gray] color-map: too few entries");
2439 png_gamma_not_sRGB(gamma) != 0)
2441 cmap_entries = (
unsigned int)make_gray_file_colormap(
display);
2442 data_encoding = P_FILE;
2446 cmap_entries = (
unsigned int)make_gray_colormap(
display);
2461 if (data_encoding == P_FILE)
2468 if (output_encoding == P_sRGB)
2469 gray = png_sRGB_table[gray];
2471 gray =
PNG_DIV257(png_gamma_16bit_correct(gray, gamma));
2477 png_create_colormap_entry(
display, gray, back_g, back_g,
2478 back_g, 0, output_encoding);
2481 else if (output_encoding == P_LINEAR)
2483 gray = PNG_sRGB_FROM_LINEAR(gray * 255);
2487 png_create_colormap_entry(
display, gray, back_g, back_g,
2488 back_g, 0, P_LINEAR);
2495 c.gray =
c.red =
c.green =
c.blue = (png_uint_16)gray;
2507 output_processing = PNG_CMAP_NONE;
2518 data_encoding = P_sRGB;
2531 if (PNG_RGB_COLORMAP_ENTRIES+1+27 >
image->colormap_entries)
2532 png_error(
png_ptr,
"rgb+alpha color-map: too few entries");
2534 cmap_entries = (
unsigned int)make_rgb_colormap(
display);
2537 png_create_colormap_entry(
display, cmap_entries, 255, 255,
2543 background_index = cmap_entries++;
2546 for (
r=0;
r<256;
r = (
r << 1) | 0x7f)
2550 for (
g=0;
g<256;
g = (
g << 1) | 0x7f)
2557 for (
b=0;
b<256;
b = (
b << 1) | 0x7f)
2558 png_create_colormap_entry(
display, cmap_entries++,
2559 r,
g,
b, 128, P_sRGB);
2564 output_processing = PNG_CMAP_RGB_ALPHA;
2576 unsigned int sample_size =
2580 if (PNG_RGB_COLORMAP_ENTRIES+1+27 >
image->colormap_entries)
2581 png_error(
png_ptr,
"rgb-alpha color-map: too few entries");
2583 cmap_entries = (
unsigned int)make_rgb_colormap(
display);
2585 png_create_colormap_entry(
display, cmap_entries, back_r,
2586 back_g, back_b, 0, output_encoding);
2588 if (output_encoding == P_LINEAR)
2590 r = PNG_sRGB_FROM_LINEAR(back_r * 255);
2591 g = PNG_sRGB_FROM_LINEAR(back_g * 255);
2592 b = PNG_sRGB_FROM_LINEAR(back_b * 255);
2608 sample_size * cmap_entries,
2610 sample_size * PNG_RGB_INDEX(
r,
g,
b),
2614 background_index = cmap_entries++;
2619 for (
r=0;
r<256;
r = (
r << 1) | 0x7f)
2621 for (
g=0;
g<256;
g = (
g << 1) | 0x7f)
2626 for (
b=0;
b<256;
b = (
b << 1) | 0x7f)
2627 png_create_colormap_entry(
display, cmap_entries++,
2628 png_colormap_compose(
display,
r, P_sRGB, 128,
2629 back_r, output_encoding),
2630 png_colormap_compose(
display,
g, P_sRGB, 128,
2631 back_g, output_encoding),
2632 png_colormap_compose(
display,
b, P_sRGB, 128,
2633 back_b, output_encoding),
2634 0, output_encoding);
2639 output_processing = PNG_CMAP_RGB_ALPHA;
2647 c.red = (png_uint_16)back_r;
2648 c.gray =
c.green = (png_uint_16)back_g;
2649 c.blue = (png_uint_16)back_b;
2655 output_processing = PNG_CMAP_RGB;
2665 if (PNG_RGB_COLORMAP_ENTRIES >
image->colormap_entries)
2666 png_error(
png_ptr,
"rgb color-map: too few entries");
2668 cmap_entries = (
unsigned int)make_rgb_colormap(
display);
2669 output_processing = PNG_CMAP_RGB;
2679 unsigned int num_trans =
png_ptr->num_trans;
2682 int do_background = trans !=
NULL &&
2690 output_processing = PNG_CMAP_NONE;
2691 data_encoding = P_FILE;
2692 cmap_entries = (
unsigned int)
png_ptr->num_palette;
2693 if (cmap_entries > 256)
2696 if (cmap_entries > (
unsigned int)
image->colormap_entries)
2697 png_error(
png_ptr,
"palette color-map: too few entries");
2699 for (
i=0;
i < cmap_entries; ++
i)
2701 if (do_background != 0 &&
i < num_trans && trans[
i] < 255)
2704 png_create_colormap_entry(
display,
i, back_r, back_g,
2705 back_b, 0, output_encoding);
2712 png_create_colormap_entry(
display,
i,
2714 P_FILE, trans[
i], back_r, output_encoding),
2716 P_FILE, trans[
i], back_g, output_encoding),
2718 P_FILE, trans[
i], back_b, output_encoding),
2719 output_encoding == P_LINEAR ? trans[
i] * 257U :
2728 i < num_trans ? trans[
i] : 255U, P_FILE);
2740 png_error(
png_ptr,
"invalid PNG color type");
2745 if (expand_tRNS != 0 &&
png_ptr->num_trans > 0 &&
2747 png_set_tRNS_to_alpha(
png_ptr);
2749 switch (data_encoding)
2763 png_error(
png_ptr,
"bad data option (internal error)");
2767 if (cmap_entries > 256 || cmap_entries >
image->colormap_entries)
2768 png_error(
png_ptr,
"color map overflow (BAD internal error)");
2770 image->colormap_entries = cmap_entries;
2773 switch (output_processing)
2776 if (background_index != PNG_CMAP_NONE_BACKGROUND)
2777 goto bad_background;
2781 if (background_index != PNG_CMAP_GA_BACKGROUND)
2782 goto bad_background;
2785 case PNG_CMAP_TRANS:
2786 if (background_index >= cmap_entries ||
2787 background_index != PNG_CMAP_TRANS_BACKGROUND)
2788 goto bad_background;
2792 if (background_index != PNG_CMAP_RGB_BACKGROUND)
2793 goto bad_background;
2796 case PNG_CMAP_RGB_ALPHA:
2797 if (background_index != PNG_CMAP_RGB_ALPHA_BACKGROUND)
2798 goto bad_background;
2802 png_error(
png_ptr,
"bad processing option (internal error)");
2805 png_error(
png_ptr,
"bad background index (internal error)");
2808 display->colormap_processing = (
int)output_processing;
2815png_image_read_and_map(
png_voidp argument)
2838 png_error(
png_ptr,
"unknown interlace type");
2851 unsigned int startx, stepx, stepy;
2890 for (; outrow < end_row; outrow += stepx)
2893 unsigned int gray = *inrow++;
2894 unsigned int alpha = *inrow++;
2903 entry = (231 * gray + 128) >> 8;
2905 else if (
alpha < 26)
2911 entry = 226 + 6 * PNG_DIV51(
alpha) + PNG_DIV51(gray);
2914 *outrow = (png_byte)
entry;
2918 case PNG_CMAP_TRANS:
2919 for (; outrow < end_row; outrow += stepx)
2921 png_byte gray = *inrow++;
2922 png_byte
alpha = *inrow++;
2925 *outrow = PNG_CMAP_TRANS_BACKGROUND;
2927 else if (gray != PNG_CMAP_TRANS_BACKGROUND)
2931 *outrow = (png_byte)(PNG_CMAP_TRANS_BACKGROUND+1);
2936 for (; outrow < end_row; outrow += stepx)
2938 *outrow = PNG_RGB_INDEX(inrow[0], inrow[1], inrow[2]);
2943 case PNG_CMAP_RGB_ALPHA:
2944 for (; outrow < end_row; outrow += stepx)
2946 unsigned int alpha = inrow[3];
2954 *outrow = PNG_RGB_INDEX(inrow[0], inrow[1],
2957 else if (
alpha < 64)
2958 *outrow = PNG_CMAP_RGB_ALPHA_BACKGROUND;
2968 unsigned int back_i = PNG_CMAP_RGB_ALPHA_BACKGROUND+1;
2979 if (inrow[0] & 0x80) back_i += 9;
2980 if (inrow[0] & 0x40) back_i += 9;
2981 if (inrow[0] & 0x80) back_i += 3;
2982 if (inrow[0] & 0x40) back_i += 3;
2983 if (inrow[0] & 0x80) back_i += 1;
2984 if (inrow[0] & 0x40) back_i += 1;
2986 *outrow = (png_byte)back_i;
3004png_image_read_colormapped(
png_voidp argument)
3021 if (
display->colormap_processing == PNG_CMAP_NONE)
3022 passes = png_set_interlace_handling(
png_ptr);
3027 switch (
display->colormap_processing)
3040 case PNG_CMAP_TRANS:
3049 image->colormap_entries == 256)
3059 image->colormap_entries == 216)
3064 case PNG_CMAP_RGB_ALPHA:
3069 image->colormap_entries == 244 )
3076 png_error(
png_ptr,
"bad color-map processing (internal error)");
3093 ptr += (
image->height-1) * (-row_step);
3097 display->first_row = first_row;
3118 while (--passes >= 0)
3136png_image_read_direct_scaled(
png_voidp argument)
3161 png_error(
png_ptr,
"unknown interlace type");
3165 while (--passes >= 0)
3191png_image_read_composite(
png_voidp argument)
3210 png_error(
png_ptr,
"unknown interlace type");
3224 unsigned int startx, stepx, stepy;
3257 outrow +=
y * row_step;
3262 for (; outrow < end_row; outrow += stepx)
3276 if (optimize_alpha != 0)
3284 component *= 257*255;
3285 component += (255-
alpha)*png_sRGB_table[outrow[
c]];
3292 if (component > 255*65535)
3293 component = 255*65535;
3299 component = PNG_sRGB_FROM_LINEAR(component);
3310 component += ((255-
alpha) * background + 127) / 255;
3311 if (component > 255)
3316 outrow[
c] = (png_byte)component;
3343png_image_read_background(
png_voidp argument)
3360 png_error(
png_ptr,
"lost rgb to gray");
3363 png_error(
png_ptr,
"unexpected compose");
3366 png_error(
png_ptr,
"lost/gained channels");
3371 png_error(
png_ptr,
"unexpected 8-bit transformation");
3384 png_error(
png_ptr,
"unknown interlace type");
3406 unsigned int startx, stepx, stepy;
3442 for (; outrow < end_row; outrow += stepx)
3444 png_byte
alpha = inrow[1];
3456 component = png_sRGB_table[component] *
alpha;
3457 component += png_sRGB_table[outrow[0]] *
3459 component = PNG_sRGB_FROM_LINEAR(component);
3462 outrow[0] = (png_byte)component;
3472 png_byte background8 =
display->background->green;
3473 png_uint_16 background = png_sRGB_table[background8];
3487 for (; outrow < end_row; outrow += stepx)
3489 png_byte
alpha = inrow[1];
3497 component = png_sRGB_table[component] *
alpha;
3498 component += background * (255-
alpha);
3499 component = PNG_sRGB_FROM_LINEAR(component);
3502 outrow[0] = (png_byte)component;
3506 outrow[0] = background8;
3528 unsigned int preserve_alpha = (
image->format &
3530 unsigned int outchannels = 1U+preserve_alpha;
3533# ifdef PNG_SIMPLIFIED_READ_AFIRST_SUPPORTED
3534 if (preserve_alpha != 0 &&
3541 unsigned int startx, stepx, stepy;
3562 stepx = outchannels;
3580 for (; outrow < end_row; outrow += stepx)
3583 png_uint_16
alpha = inrow[1];
3598 outrow[swap_alpha] = (png_uint_16)component;
3599 if (preserve_alpha != 0)
3600 outrow[1 ^ swap_alpha] =
alpha;
3611 png_error(
png_ptr,
"unexpected bit depth");
3620png_image_read_direct(
png_voidp argument)
3630 int do_local_compose = 0;
3631 int do_local_background = 0;
3632 int do_local_scale = 0;
3644 ~PNG_FORMAT_FLAG_COLORMAP ;
3672 do_local_background = 1;
3678 change &= ~PNG_FORMAT_FLAG_COLOR;
3727 change &= ~PNG_FORMAT_FLAG_ASSOCIATED_ALPHA;
3736 if (do_local_background != 0)
3745 if (png_muldiv(>est, output_gamma,
3747 png_gamma_significant(gtest) == 0)
3748 do_local_background = 0;
3752 do_local_background = 2;
3776 change &= ~PNG_FORMAT_FLAG_LINEAR;
3793 if (do_local_background != 0)
3794 do_local_background = 2;
3797 else if (linear != 0)
3807 c.green =
display->background->green;
3808 c.blue =
display->background->blue;
3809 c.gray =
display->background->green;
3824 do_local_compose = 1;
3850#ifdef PNG_FORMAT_AFIRST_SUPPORTED
3854 change &= ~PNG_FORMAT_FLAG_AFIRST;
3865 change &= ~PNG_FORMAT_FLAG_ALPHA;
3874# ifdef PNG_FORMAT_BGR_SUPPORTED
3884 format &= ~PNG_FORMAT_FLAG_BGR;
3886 change &= ~PNG_FORMAT_FLAG_BGR;
3890# ifdef PNG_FORMAT_AFIRST_SUPPORTED
3903 if (do_local_background != 2)
3908 format &= ~PNG_FORMAT_FLAG_AFIRST;
3910 change &= ~PNG_FORMAT_FLAG_AFIRST;
3919 png_uint_16 le = 0x0001;
3927 png_error(
png_ptr,
"png_read_image: unsupported transformation");
3938 if (do_local_compose == 0 && do_local_background != 2)
3939 passes = png_set_interlace_handling(
png_ptr);
3952 if (do_local_compose == 0)
3955 if (do_local_background != 2 ||
3961 else if (do_local_compose != 0)
3962 png_error(
png_ptr,
"png_image_read: alpha channel lost");
3971#ifdef PNG_FORMAT_BGR_SUPPORTED
3976#ifdef PNG_FORMAT_AFIRST_SUPPORTED
3977 if (do_local_background == 2)
3987 if (do_local_background == 2)
3988 png_error(
png_ptr,
"unexpected alpha swap transformation");
3995 if (info_format !=
format)
3996 png_error(
png_ptr,
"png_read_image: invalid transformations");
4017 ptr += (
image->height - 1) * (-row_step);
4021 display->first_row = first_row;
4025 if (do_local_compose != 0)
4038 else if (do_local_background == 2)
4051 else if (do_local_scale != 0)
4073 while (--passes >= 0)
4091 void *
buffer, png_int_32 row_stride,
void *colormap)
4112 if (row_stride == 0)
4113 row_stride = (png_int_32)png_row_stride;
4143 if (
image->height <=
4147 (
image->colormap_entries > 0 && colormap !=
NULL))
4150 png_image_read_control
display;
4155 display.row_stride = row_stride;
4157 display.background = background;
4165 png_safe_execute(
image,
4166 png_image_read_colormap, &
display) &&
4167 png_safe_execute(
image,
4168 png_image_read_colormapped, &
display);
4172 png_safe_execute(
image,
4173 png_image_read_direct, &
display);
4175 png_image_free(
image);
4180 return png_image_error(
image,
4181 "png_image_finish_read[color-map]: no color-map");
4185 return png_image_error(
image,
4186 "png_image_finish_read: image too large");
4190 return png_image_error(
image,
4191 "png_image_finish_read: invalid argument");
4195 return png_image_error(
image,
4196 "png_image_finish_read: row_stride too large");
4200 return png_image_error(
image,
4201 "png_image_finish_read: damaged PNG_IMAGE_VERSION");
int inflateEnd(z_streamp strm)
char *CDECL strerror(int err)
int CDECL fclose(FILE *file)
FILE *CDECL fopen(const char *path, const char *mode)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
static unsigned int output_format
struct png_info_def *typedef unsigned char **typedef struct png_info_def *typedef struct png_info_def *typedef struct png_info_def *typedef unsigned char ** row
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
#define check(expected, result)
for(i=0;i< ARRAY_SIZE(offsets);i++)
GLclampf GLclampf GLclampf alpha
GLint GLint GLint GLint GLint GLint y
GLint GLint GLsizei GLsizei height
GLdouble GLdouble GLdouble r
GLint GLint GLsizei width
GLboolean GLboolean GLboolean b
GLenum const GLfloat * params
GLuint GLsizei GLsizei * length
GLboolean GLboolean GLboolean GLboolean a
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
void display_row(char *data, int off, int len)
#define memcpy(s1, s2, n)
#define PNG_COLOR_TYPE_RGB
#define PNG_COLOR_TYPE_RGB_ALPHA
#define PNG_COLOR_TYPE_GRAY_ALPHA
#define PNG_COLOR_TYPE_GRAY
#define PNG_COLOR_TYPE_PALETTE
static const char filler[0x1000]
static char memory[1024 *256]
static UINT PSTR DWORD UINT * need
#define PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB
#define PNG_FORMAT_FLAG_COLOR
#define PNG_TRANSFORM_SWAP_ENDIAN
#define PNG_TRANSFORM_EXPAND_16
#define PNG_IMAGE_VERSION
png_set_rgb_to_gray_fixed
#define PNG_TRANSFORM_GRAY_TO_RGB
#define PNG_TRANSFORM_INVERT_ALPHA
#define PNG_INTRAPIXEL_DIFFERENCING
#define PNG_TRANSFORM_EXPAND
#define PNG_FILLER_BEFORE
#define PNG_TRANSFORM_PACKING
#define PNG_FORMAT_FLAG_AFIRST
#define PNG_INTERLACE_ADAM7_PASSES
#define PNG_TRANSFORM_SWAP_ALPHA
#define PNG_FORMAT_FLAG_COLORMAP
#define PNG_TRANSFORM_STRIP_ALPHA
#define PNG_ERROR_ACTION_NONE
struct png_control * png_controlp
#define PNG_TRANSFORM_INVERT_MONO
#define PNG_FLAG_MNG_FILTER_64
#define PNG_TRANSFORM_PACKSWAP
#define PNG_PASS_START_COL(pass)
#define PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)
#define PNG_FORMAT_FLAG_BGR
#define PNG_COLOR_MASK_COLOR
#define PNG_RGB_TO_GRAY_DEFAULT
#define PNG_COLOR_MASK_PALETTE
#define PNG_PASS_START_ROW(pass)
#define PNG_FILTER_VALUE_LAST
#define PNG_TRANSFORM_BGR
#define PNG_IMAGE_SAMPLE_SIZE(fmt)
#define PNG_HANDLE_CHUNK_NEVER
#define PNG_COLOR_MASK_ALPHA
#define PNG_FORMAT_FLAG_LINEAR
#define PNG_PASS_COLS(width, pass)
#define PNG_INTERLACE_ADAM7
#define PNG_ALPHA_OPTIMIZED
#define PNG_ALPHA_STANDARD
#define PNG_IMAGE_FLAG_16BIT_sRGB
const png_struct *PNG_RESTRICT png_const_structrp
#define PNG_LIBPNG_VER_STRING
#define PNG_FORMAT_FLAG_ALPHA
#define PNG_FILTER_VALUE_NONE
#define PNG_INTERLACE_NONE
#define PNG_FORMAT_FLAG_ASSOCIATED_ALPHA
#define PNG_IMAGE_SAMPLE_CHANNELS(fmt)
png_info *PNG_RESTRICT png_inforp
#define PNG_PASS_COL_OFFSET(pass)
#define PNG_PASS_ROW_OFFSET(pass)
#define PNG_TRANSFORM_STRIP_16
#define PNG_BACKGROUND_GAMMA_SCREEN
#define PNG_IMAGE_PIXEL_CHANNELS(fmt)
#define PNG_HANDLE_CHUNK_AS_DEFAULT
png_struct *PNG_RESTRICT png_structrp
#define PNG_TRANSFORM_SHIFT
png_const_structrp png_const_inforp info_ptr
#define PNG_FUNCTION(type, name, args, attributes)
png_int_32 png_fixed_point
const png_byte * png_const_bytep
const png_uint_16 * png_const_uint_16p
png_uint_16 * png_uint_16p
const char * png_const_charp
#define png_debug2(l, m, p1, p2)
#define PNG_IDAT_READ_SIZE
#define PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
#define PNG_OUT_OF_RANGE(value, ideal, delta)
#define PNG_UNUSED(param)
#define PNG_FLAG_OPTIMIZE_ALPHA
#define PNG_ROWBYTES(pixel_bits, width)
#define png_app_error(pp, s)
#define PNG_FLAG_BENIGN_ERRORS_WARN
#define PNG_HAVE_CHUNK_AFTER_IDAT
#define PNG_FLAG_APP_WARNINGS_WARN
#define PNG_IS_READ_STRUCT
#define PNG_FLAG_ZSTREAM_ENDED
#define PNG_FLAG_FILLER_AFTER
#define PNG_GAMMA_sRGB_INVERSE
#define PNG_FLAG_ROW_INIT
#define png_voidcast(type, value)
#define PNG_LIB_GAMMA_MAX
#define png_has_chunk(png_ptr, cHNK)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList