20#ifdef PNG_ARM_NEON_IMPLEMENTATION
21# if PNG_ARM_NEON_IMPLEMENTATION == 1
22# define PNG_ARM_NEON_INTRINSICS_AVAILABLE
23# if defined(_MSC_VER) && !defined(__clang__) && defined(_M_ARM64)
24# include <arm64_neon.h>
31#ifdef PNG_RISCV_RVV_IMPLEMENTATION
32# if PNG_RISCV_RVV_IMPLEMENTATION == 1
33# define PNG_RISCV_RVV_INTRINSICS_AVAILABLE
37#ifdef PNG_READ_SUPPORTED
55 png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
60 png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
67 "Can't discard critical data on CRC error");
73 png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
84 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
89 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
95 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
103 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
108#ifdef PNG_READ_TRANSFORMS_SUPPORTED
121 "invalid after png_start_read_image or png_read_update_info");
139#ifdef PNG_READ_BACKGROUND_SUPPORTED
146 png_debug(1,
"in png_set_background_fixed");
153 png_warning(
png_ptr,
"Application must supply a known background gamma");
158 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
159 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
162 png_ptr->background_gamma = background_gamma;
167 png_ptr->transformations &= ~PNG_BACKGROUND_EXPAND;
170# ifdef PNG_FLOATING_POINT_SUPPORTED
186#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
192 if (png_rtran_ok(
png_ptr, 0) == 0)
199#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
206 if (png_rtran_ok(
png_ptr, 0) == 0)
213#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
219 if (png_rtran_ok(
png_ptr, 0) == 0)
226#if defined(PNG_READ_ALPHA_MODE_SUPPORTED) || defined(PNG_READ_GAMMA_SUPPORTED)
307# ifdef PNG_FLOATING_POINT_SUPPORTED
318 if (output_gamma > 0 && output_gamma < 128)
322 output_gamma =
floor(output_gamma + .5);
346# define msg "gamma out of supported range"
359#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
367 png_debug(1,
"in png_set_alpha_mode_fixed");
369 if (png_rtran_ok(
png_ptr, 0) == 0)
372 output_gamma = translate_gamma_flags(output_gamma, 1);
373 if (unsupported_gamma(
png_ptr, output_gamma, 0))
381 file_gamma =
png_ptr->default_gamma;
384 file_gamma = png_reciprocal(output_gamma);
385 png_ptr->default_gamma = file_gamma;
408 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
409 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
414 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
415 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
422 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
430 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
434 png_error(
png_ptr,
"invalid alpha mode");
438 png_ptr->screen_gamma = output_gamma;
447 png_ptr->background_gamma = file_gamma;
449 png_ptr->transformations &= ~PNG_BACKGROUND_EXPAND;
453 "conflicting calls to set alpha mode and background");
459# ifdef PNG_FLOATING_POINT_SUPPORTED
469#ifdef PNG_READ_QUANTIZE_SUPPORTED
479typedef struct png_dsort_struct
481 struct png_dsort_struct *
next;
485typedef png_dsort * png_dsortp;
486typedef png_dsort * * png_dsortpp;
495 if (png_rtran_ok(
png_ptr, 0) == 0)
500 if (full_quantize == 0)
517 png_ptr->quantize_index[
i] = (png_byte)
i;
520 if (num_palette > maximum_colors)
534 for (
i = 0;
i < num_palette;
i++)
535 quantize_sort[
i] = (png_byte)
i;
544 for (
i = num_palette - 1;
i >= maximum_colors;
i--)
549 for (
j = 0;
j <
i;
j++)
556 t = quantize_sort[
j];
557 quantize_sort[
j] = quantize_sort[
j + 1];
558 quantize_sort[
j + 1] =
t;
568 if (full_quantize != 0)
575 for (
i = 0;
i < maximum_colors;
i++)
577 if ((
int)quantize_sort[
i] >= maximum_colors)
581 while ((
int)quantize_sort[
j] >= maximum_colors);
594 for (
i = 0;
i < maximum_colors;
i++)
597 if ((
int)quantize_sort[
i] >= maximum_colors)
603 while ((
int)quantize_sort[
j] >= maximum_colors);
609 png_ptr->quantize_index[
j] = (png_byte)
i;
610 png_ptr->quantize_index[
i] = (png_byte)
j;
615 for (
i = 0;
i < num_palette;
i++)
617 if ((
int)
png_ptr->quantize_index[
i] >= maximum_colors)
619 int min_d,
k, min_k, d_index;
622 d_index =
png_ptr->quantize_index[
i];
624 for (
k = 1, min_k = 0;
k < maximum_colors;
k++)
637 png_ptr->quantize_index[
i] = (png_byte)min_k;
641 png_free(
png_ptr, quantize_sort);
668 for (
i = 0;
i < num_palette;
i++)
670 png_ptr->index_to_palette[
i] = (png_byte)
i;
671 png_ptr->palette_to_index[
i] = (png_byte)
i;
675 (
sizeof (png_dsortp))));
677 num_new_palette = num_palette;
689 while (num_new_palette > maximum_colors)
691 for (
i = 0;
i < num_new_palette - 1;
i++)
695 for (
j =
i + 1;
j < num_new_palette;
j++)
704 t = (png_dsortp)png_malloc_warn(
png_ptr,
711 t->left = (png_byte)
i;
712 t->right = (png_byte)
j;
721 for (
i = 0;
i <= max_d;
i++)
729 if ((
int)
png_ptr->index_to_palette[
p->left]
736 if (num_new_palette & 0x01)
750 if (full_quantize == 0)
754 for (
k = 0;
k < num_palette;
k++)
759 png_ptr->index_to_palette[next_j];
761 if ((
int)
png_ptr->quantize_index[
k] ==
769 [num_new_palette]] =
png_ptr->index_to_palette[
j];
772 =
png_ptr->palette_to_index[num_new_palette];
775 (png_byte)num_new_palette;
777 png_ptr->palette_to_index[num_new_palette] =
780 if (num_new_palette <= maximum_colors)
783 if (num_new_palette <= maximum_colors)
788 for (
i = 0;
i < 769;
i++)
810 num_palette = maximum_colors;
816 png_ptr->num_palette = (png_uint_16)num_palette;
818 if (full_quantize != 0)
827 size_t num_entries = ((
size_t)1 << total_bits);
836 for (
i = 0;
i < num_palette;
i++)
843 for (ir = 0; ir < num_red; ir++)
846 int dr = ((ir >
r) ? ir -
r :
r - ir);
850 for (ig = 0; ig < num_green; ig++)
853 int dg = ((ig >
g) ? ig -
g :
g - ig);
855 int dm = ((dr > dg) ? dr : dg);
858 for (ib = 0; ib < num_blue; ib++)
860 int d_index = index_g | ib;
862 int db = ((ib >
b) ? ib -
b :
b - ib);
863 int dmax = ((dm > db) ? dm : db);
864 int d = dmax + dt + db;
869 png_ptr->palette_lookup[d_index] = (png_byte)
i;
881#ifdef PNG_READ_GAMMA_SUPPORTED
888 if (png_rtran_ok(
png_ptr, 0) == 0)
892 scrn_gamma = translate_gamma_flags(scrn_gamma, 1);
893 file_gamma = translate_gamma_flags(file_gamma, 0);
911 if (unsupported_gamma(
png_ptr, file_gamma, 1) ||
912 unsupported_gamma(
png_ptr, scrn_gamma, 1))
919 png_ptr->file_gamma = file_gamma;
920 png_ptr->screen_gamma = scrn_gamma;
923# ifdef PNG_FLOATING_POINT_SUPPORTED
928 convert_gamma_value(
png_ptr, file_gamma));
933#ifdef PNG_READ_EXPAND_SUPPORTED
943 if (png_rtran_ok(
png_ptr, 0) == 0)
971 png_debug(1,
"in png_set_palette_to_rgb");
973 if (png_rtran_ok(
png_ptr, 0) == 0)
983 png_debug(1,
"in png_set_expand_gray_1_2_4_to_8");
985 if (png_rtran_ok(
png_ptr, 0) == 0)
995 png_debug(1,
"in png_set_tRNS_to_alpha");
997 if (png_rtran_ok(
png_ptr, 0) == 0)
1004#ifdef PNG_READ_EXPAND_16_SUPPORTED
1013 if (png_rtran_ok(
png_ptr, 0) == 0)
1020#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
1026 if (png_rtran_ok(
png_ptr, 0) == 0)
1030 png_set_expand_gray_1_2_4_to_8(
png_ptr);
1035#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
1040 png_debug(1,
"in png_set_rgb_to_gray_fixed");
1044 if (png_rtran_ok(
png_ptr, 1) == 0)
1062 png_error(
png_ptr,
"invalid error action to rgb_to_gray");
1066#ifdef PNG_READ_EXPAND_SUPPORTED
1074 "Cannot do RGB_TO_GRAY without EXPAND_SUPPORTED");
1082 png_uint_16 red_int, green_int;
1092 png_ptr->rgb_to_gray_red_coeff = red_int;
1093 png_ptr->rgb_to_gray_green_coeff = green_int;
1094 png_ptr->rgb_to_gray_coefficients_set = 1;
1099 "ignoring out of range rgb_to_gray coefficients");
1103#ifdef PNG_FLOATING_POINT_SUPPORTED
1113 png_fixed(
png_ptr,
red,
"rgb to gray red coefficient"),
1114 png_fixed(
png_ptr,
green,
"rgb to gray green coefficient"));
1120#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
1121 defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
1124 png_user_transform_ptr read_user_transform_fn)
1126 png_debug(1,
"in png_set_read_user_transform_fn");
1128#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
1130 png_ptr->read_user_transform_fn = read_user_transform_fn;
1135#ifdef PNG_READ_TRANSFORMS_SUPPORTED
1136#ifdef PNG_READ_GAMMA_SUPPORTED
1153 png_gamma_significant(gtest);
1177 int input_has_alpha = 0;
1178 int input_has_transparency = 0;
1187 if (
png_ptr->trans_alpha[
i] == 255)
1189 else if (
png_ptr->trans_alpha[
i] == 0)
1190 input_has_transparency = 1;
1193 input_has_transparency = 1;
1194 input_has_alpha = 1;
1201 if (input_has_alpha == 0)
1207 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
1208 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1210 if (input_has_transparency == 0)
1214#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED)
1234#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
1244 for (
i = 0;
i < istop;
i++)
1246 (png_byte)(255 -
png_ptr->trans_alpha[
i]);
1263 int input_has_transparency =
png_ptr->num_trans > 0;
1266 if (input_has_alpha == 0)
1272# ifdef PNG_READ_ALPHA_MODE_SUPPORTED
1273 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
1274 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1277 if (input_has_transparency == 0)
1281#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED)
1297 int gray =
png_ptr->background.gray;
1298 int trans_gray =
png_ptr->trans_color.gray;
1328 png_ptr->background.blue = (png_uint_16)gray;
1333 png_ptr->trans_color.blue = (png_uint_16)trans_gray;
1340#ifdef PNG_READ_GAMMA_SUPPORTED
1355 file_gamma =
png_ptr->file_gamma;
1356 if (file_gamma != 0)
1359 file_gamma =
png_ptr->chunk_gamma;
1360 if (file_gamma != 0)
1363 file_gamma =
png_ptr->default_gamma;
1364 if (file_gamma != 0)
1371 if (
png_ptr->screen_gamma != 0)
1372 file_gamma = png_reciprocal(
png_ptr->screen_gamma);
1383 int gamma_correction = 0;
1389 file_gamma = png_resolve_file_gamma(
png_ptr);
1395 gamma_correction = png_gamma_threshold(file_gamma,
screen_gamma);
1407 png_ptr->file_gamma = file_gamma;
1409 return gamma_correction;
1417 png_debug(1,
"in png_init_read_transformations");
1427#ifdef PNG_READ_GAMMA_SUPPORTED
1444 if (png_init_gamma_values(
png_ptr) != 0)
1448 png_ptr->transformations &= ~PNG_GAMMA;
1480#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
1491 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1504#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
1508 if (png_gamma_significant(
png_ptr->screen_gamma) == 0)
1510 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
1511 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1515#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
1520 png_set_rgb_coefficients(
png_ptr);
1523#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
1524#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED)
1581 png_init_palette_transformations(
png_ptr);
1584 png_init_rgb_transformations(
png_ptr);
1586#if defined(PNG_READ_BACKGROUND_SUPPORTED) && \
1587 defined(PNG_READ_EXPAND_16_SUPPORTED)
1603# define CHOP(x) (x)=((png_uint_16)PNG_DIV257(x))
1604 CHOP(
png_ptr->background.red);
1605 CHOP(
png_ptr->background.green);
1606 CHOP(
png_ptr->background.blue);
1607 CHOP(
png_ptr->background.gray);
1612#if defined(PNG_READ_BACKGROUND_SUPPORTED) && \
1613 (defined(PNG_READ_SCALE_16_TO_8_SUPPORTED) || \
1614 defined(PNG_READ_STRIP_16_TO_8_SUPPORTED))
1626 png_ptr->background.red = (png_uint_16)(
png_ptr->background.red * 257);
1628 (png_uint_16)(
png_ptr->background.green * 257);
1629 png_ptr->background.blue = (png_uint_16)(
png_ptr->background.blue * 257);
1630 png_ptr->background.gray = (png_uint_16)(
png_ptr->background.gray * 257);
1642#ifdef PNG_READ_GAMMA_SUPPORTED
1643# ifdef PNG_READ_BACKGROUND_SUPPORTED
1663 (png_gamma_significant(
png_ptr->file_gamma) != 0 ||
1664 png_gamma_significant(
png_ptr->screen_gamma) != 0)) ||
1666 (png_gamma_significant(
png_ptr->file_gamma) != 0 ||
1667 png_gamma_significant(
png_ptr->screen_gamma) != 0
1668# ifdef PNG_READ_BACKGROUND_SUPPORTED
1670 png_gamma_significant(
png_ptr->background_gamma) != 0)
1673 png_gamma_significant(
png_ptr->screen_gamma) != 0))
1677#ifdef PNG_READ_BACKGROUND_SUPPORTED
1688 "libpng does not support gamma+background+rgb_to_gray");
1697 int num_palette =
png_ptr->num_palette;
1714 switch (
png_ptr->background_gamma_type)
1722 g = png_reciprocal(
png_ptr->file_gamma);
1723 gs = png_reciprocal2(
png_ptr->file_gamma,
1728 g = png_reciprocal(
png_ptr->background_gamma);
1729 gs = png_reciprocal2(
png_ptr->background_gamma,
1738 if (png_gamma_significant(
gs) != 0)
1740 back.
red = png_gamma_8bit_correct(
png_ptr->background.red,
1742 back.
green = png_gamma_8bit_correct(
png_ptr->background.green,
1744 back.
blue = png_gamma_8bit_correct(
png_ptr->background.blue,
1750 back.
red = (png_byte)
png_ptr->background.red;
1755 if (png_gamma_significant(
g) != 0)
1757 back_1.
red = png_gamma_8bit_correct(
png_ptr->background.red,
1759 back_1.
green = png_gamma_8bit_correct(
1761 back_1.
blue = png_gamma_8bit_correct(
png_ptr->background.blue,
1767 back_1.
red = (png_byte)
png_ptr->background.red;
1773 for (
i = 0;
i < num_palette;
i++)
1793 (component *
png_ptr->trans_alpha[
i] + 128) / 255;
1798 (component *
png_ptr->trans_alpha[
i] + 128) / 255;
1803 (component *
png_ptr->trans_alpha[
i] + 128) / 255;
1846 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1856 switch (
png_ptr->background_gamma_type)
1864 g = png_reciprocal(
png_ptr->file_gamma);
1865 gs = png_reciprocal2(
png_ptr->file_gamma,
1870 g = png_reciprocal(
png_ptr->background_gamma);
1871 gs = png_reciprocal2(
png_ptr->background_gamma,
1876 png_error(
png_ptr,
"invalid background gamma type");
1879 g_sig = png_gamma_significant(
g);
1880 gs_sig = png_gamma_significant(
gs);
1947 int num_palette =
png_ptr->num_palette;
1953 for (
i = 0;
i < num_palette;
i++)
1961 png_ptr->transformations &= ~PNG_GAMMA;
1964#ifdef PNG_READ_BACKGROUND_SUPPORTED
1969#ifdef PNG_READ_BACKGROUND_SUPPORTED
1979 back.
red = (png_byte)
png_ptr->background.red;
1983 for (
i = 0;
i < istop;
i++)
1990 else if (
png_ptr->trans_alpha[
i] != 0xff)
2004 png_ptr->transformations &= ~PNG_COMPOSE;
2008#ifdef PNG_READ_SHIFT_SUPPORTED
2014 int istop =
png_ptr->num_palette;
2017 png_ptr->transformations &= ~PNG_SHIFT;
2024 for (
i=0;
i<istop; ++
i)
2026 int component =
png_ptr->palette[
i].red;
2028 component >>=
shift;
2029 png_ptr->palette[
i].red = (png_byte)component;
2034 for (
i=0;
i<istop; ++
i)
2036 int component =
png_ptr->palette[
i].green;
2038 component >>=
shift;
2039 png_ptr->palette[
i].green = (png_byte)component;
2044 for (
i=0;
i<istop; ++
i)
2046 int component =
png_ptr->palette[
i].blue;
2048 component >>=
shift;
2049 png_ptr->palette[
i].blue = (png_byte)component;
2062 png_debug(1,
"in png_read_transform_info");
2064#ifdef PNG_READ_EXPAND_SUPPORTED
2083 png_error (
png_ptr,
"Palette is NULL in indexed image");
2100#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
2101 defined(PNG_READ_ALPHA_MODE_SUPPORTED)
2109#ifdef PNG_READ_GAMMA_SUPPORTED
2124# ifdef PNG_READ_16BIT_SUPPORTED
2125# ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
2130# ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
2140# ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
2149# ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
2160#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
2166#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
2169 ~PNG_COLOR_MASK_COLOR);
2172#ifdef PNG_READ_QUANTIZE_SUPPORTED
2184#ifdef PNG_READ_EXPAND_16_SUPPORTED
2193#ifdef PNG_READ_PACK_SUPPORTED
2233#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) && \
2234defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
2237 if (
png_ptr->user_transform_depth != 0)
2240 if (
png_ptr->user_transform_channels != 0)
2258#ifndef PNG_READ_EXPAND_SUPPORTED
2264#ifdef PNG_READ_PACK_SUPPORTED
2288 for (
i = 0;
i < row_width;
i++)
2290 *dp = (png_byte)((*
sp >>
shift) & 0x01);
2312 for (
i = 0;
i < row_width;
i++)
2314 *dp = (png_byte)((*
sp >>
shift) & 0x03);
2335 for (
i = 0;
i < row_width;
i++)
2337 *dp = (png_byte)((*
sp >>
shift) & 0x0f);
2363#ifdef PNG_READ_SHIFT_SUPPORTED
2418 if (have_shift == 0)
2438 int b = (*bp >> 1) & 0x55;
2439 *bp++ = (png_byte)
b;
2450 int gray_shift =
shift[0];
2451 int mask = 0xf >> gray_shift;
2457 int b = (*bp >> gray_shift) &
mask;
2458 *bp++ = (png_byte)
b;
2472 int b = *bp >>
shift[channel];
2475 *bp++ = (png_byte)
b;
2480#ifdef PNG_READ_16BIT_SUPPORTED
2490 int value = (bp[0] << 8) + bp[1];
2495 *bp++ = (png_byte)(
value >> 8);
2496 *bp++ = (png_byte)
value;
2506#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
2511 png_debug(1,
"in png_do_scale_16_to_8");
2553 png_int_32 tmp = *
sp++;
2554 tmp += (((
int)*
sp++ - tmp + 128) * 65535) >> 24;
2555 *dp++ = (png_byte)tmp;
2565#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
2593#ifdef PNG_READ_SWAP_ALPHA_SUPPORTED
2599 png_debug(1,
"in png_do_read_swap_alpha");
2611 for (
i = 0;
i < row_width;
i++)
2621#ifdef PNG_READ_16BIT_SUPPORTED
2630 for (
i = 0;
i < row_width;
i++)
2657 for (
i = 0;
i < row_width;
i++)
2665#ifdef PNG_READ_16BIT_SUPPORTED
2674 for (
i = 0;
i < row_width;
i++)
2689#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
2694 png_debug(1,
"in png_do_read_invert_alpha");
2696 row_width = row_info->
width;
2706 for (
i = 0;
i < row_width;
i++)
2708 *(--dp) = (png_byte)(255 - *(--
sp));
2721#ifdef PNG_READ_16BIT_SUPPORTED
2729 for (
i = 0;
i < row_width;
i++)
2731 *(--dp) = (png_byte)(255 - *(--
sp));
2732 *(--dp) = (png_byte)(255 - *(--
sp));
2758 for (
i = 0;
i < row_width;
i++)
2760 *(--dp) = (png_byte)(255 - *(--
sp));
2765#ifdef PNG_READ_16BIT_SUPPORTED
2773 for (
i = 0;
i < row_width;
i++)
2775 *(--dp) = (png_byte)(255 - *(--
sp));
2776 *(--dp) = (png_byte)(255 - *(--
sp));
2790#ifdef PNG_READ_FILLER_SUPPORTED
2799#ifdef PNG_READ_16BIT_SUPPORTED
2800 png_byte hi_filler = (png_byte)(
filler>>8);
2802 png_byte lo_filler = (png_byte)
filler;
2816 for (
i = 1;
i < row_width;
i++)
2818 *(--dp) = lo_filler;
2821 *(--dp) = lo_filler;
2824 row_info->
rowbytes = row_width * 2;
2832 for (
i = 0;
i < row_width;
i++)
2835 *(--dp) = lo_filler;
2839 row_info->
rowbytes = row_width * 2;
2843#ifdef PNG_READ_16BIT_SUPPORTED
2851 for (
i = 1;
i < row_width;
i++)
2853 *(--dp) = lo_filler;
2854 *(--dp) = hi_filler;
2858 *(--dp) = lo_filler;
2859 *(--dp) = hi_filler;
2862 row_info->
rowbytes = row_width * 4;
2870 for (
i = 0;
i < row_width;
i++)
2874 *(--dp) = lo_filler;
2875 *(--dp) = hi_filler;
2879 row_info->
rowbytes = row_width * 4;
2893 for (
i = 1;
i < row_width;
i++)
2895 *(--dp) = lo_filler;
2900 *(--dp) = lo_filler;
2903 row_info->
rowbytes = row_width * 4;
2911 for (
i = 0;
i < row_width;
i++)
2916 *(--dp) = lo_filler;
2920 row_info->
rowbytes = row_width * 4;
2924#ifdef PNG_READ_16BIT_SUPPORTED
2932 for (
i = 1;
i < row_width;
i++)
2934 *(--dp) = lo_filler;
2935 *(--dp) = hi_filler;
2943 *(--dp) = lo_filler;
2944 *(--dp) = hi_filler;
2947 row_info->
rowbytes = row_width * 8;
2955 for (
i = 0;
i < row_width;
i++)
2963 *(--dp) = lo_filler;
2964 *(--dp) = hi_filler;
2969 row_info->
rowbytes = row_width * 8;
2977#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
2997 for (
i = 0;
i < row_width;
i++)
3010 for (
i = 0;
i < row_width;
i++)
3013 *(dp--) = *(
sp - 1);
3015 *(dp--) = *(
sp - 1);
3029 for (
i = 0;
i < row_width;
i++)
3043 for (
i = 0;
i < row_width;
i++)
3048 *(dp--) = *(
sp - 1);
3050 *(dp--) = *(
sp - 1);
3065#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
3136#ifdef PNG_READ_GAMMA_SUPPORTED
3148 for (
i = 0;
i < row_width;
i++)
3150 png_byte
red = *(
sp++);
3161 *(dp++) =
png_ptr->gamma_from_1[
3176 if (have_alpha != 0)
3187 for (
i = 0;
i < row_width;
i++)
3189 png_byte
red = *(
sp++);
3205 if (have_alpha != 0)
3213#ifdef PNG_READ_GAMMA_SUPPORTED
3220 for (
i = 0;
i < row_width;
i++)
3225 hi=*(
sp)++; lo=*(
sp)++;
red = (png_uint_16)((hi << 8) | (lo));
3226 hi=*(
sp)++; lo=*(
sp)++;
green = (png_uint_16)((hi << 8) | (lo));
3227 hi=*(
sp)++; lo=*(
sp)++;
blue = (png_uint_16)((hi << 8) | (lo));
3241 png_uint_16 red_1 =
png_ptr->gamma_16_to_1[(
red & 0xff)
3243 png_uint_16 green_1 =
3246 png_uint_16 blue_1 =
png_ptr->gamma_16_to_1[(
blue & 0xff)
3248 png_uint_16 gray16 = (png_uint_16)((rc*red_1 + gc*green_1
3249 +
bc*blue_1 + 16384)>>15);
3250 w =
png_ptr->gamma_16_from_1[(gray16 & 0xff) >>
3251 png_ptr->gamma_shift][gray16 >> 8];
3255 *(dp++) = (png_byte)((
w>>8) & 0xff);
3256 *(dp++) = (png_byte)(
w & 0xff);
3258 if (have_alpha != 0)
3272 for (
i = 0;
i < row_width;
i++)
3277 hi=*(
sp)++; lo=*(
sp)++;
red = (png_uint_16)((hi << 8) | (lo));
3278 hi=*(
sp)++; lo=*(
sp)++;
green = (png_uint_16)((hi << 8) | (lo));
3279 hi=*(
sp)++; lo=*(
sp)++;
blue = (png_uint_16)((hi << 8) | (lo));
3290 *(dp++) = (png_byte)((gray16 >> 8) & 0xff);
3291 *(dp++) = (png_byte)(gray16 & 0xff);
3293 if (have_alpha != 0)
3313#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
3314 defined(PNG_READ_ALPHA_MODE_SUPPORTED)
3322#ifdef PNG_READ_GAMMA_SUPPORTED
3329 int gamma_shift =
png_ptr->gamma_shift;
3350 for (
i = 0;
i < row_width;
i++)
3352 if ((png_uint_16)((*
sp >>
shift) & 0x01)
3355 unsigned int tmp = *
sp & (0x7f7f >> (7 -
shift));
3358 *
sp = (png_byte)(tmp & 0xff);
3375#ifdef PNG_READ_GAMMA_SUPPORTED
3376 if (gamma_table !=
NULL)
3380 for (
i = 0;
i < row_width;
i++)
3382 if ((png_uint_16)((*
sp >>
shift) & 0x03)
3385 unsigned int tmp = *
sp & (0x3f3f >> (6 -
shift));
3388 *
sp = (png_byte)(tmp & 0xff);
3393 unsigned int p = (*
sp >>
shift) & 0x03;
3394 unsigned int g = (gamma_table [
p | (
p << 2) |
3395 (
p << 4) | (p << 6)] >> 6) & 0x03;
3396 unsigned int tmp = *
sp & (0x3f3f >> (6 -
shift));
3398 *
sp = (png_byte)(tmp & 0xff);
3417 for (
i = 0;
i < row_width;
i++)
3419 if ((png_uint_16)((*
sp >>
shift) & 0x03)
3422 unsigned int tmp = *
sp & (0x3f3f >> (6 -
shift));
3425 *
sp = (png_byte)(tmp & 0xff);
3443#ifdef PNG_READ_GAMMA_SUPPORTED
3444 if (gamma_table !=
NULL)
3448 for (
i = 0;
i < row_width;
i++)
3450 if ((png_uint_16)((*
sp >>
shift) & 0x0f)
3453 unsigned int tmp = *
sp & (0x0f0f >> (4 -
shift));
3456 *
sp = (png_byte)(tmp & 0xff);
3461 unsigned int p = (*
sp >>
shift) & 0x0f;
3462 unsigned int g = (gamma_table[
p | (p << 4)] >> 4) &
3464 unsigned int tmp = *
sp & (0x0f0f >> (4 -
shift));
3466 *
sp = (png_byte)(tmp & 0xff);
3485 for (
i = 0;
i < row_width;
i++)
3487 if ((png_uint_16)((*
sp >>
shift) & 0x0f)
3490 unsigned int tmp = *
sp & (0x0f0f >> (4 -
shift));
3493 *
sp = (png_byte)(tmp & 0xff);
3511#ifdef PNG_READ_GAMMA_SUPPORTED
3512 if (gamma_table !=
NULL)
3515 for (
i = 0;
i < row_width;
i++,
sp++)
3518 *
sp = (png_byte)
png_ptr->background.gray;
3521 *
sp = gamma_table[*
sp];
3528 for (
i = 0;
i < row_width;
i++,
sp++)
3531 *
sp = (png_byte)
png_ptr->background.gray;
3539#ifdef PNG_READ_GAMMA_SUPPORTED
3540 if (gamma_16 !=
NULL)
3543 for (
i = 0;
i < row_width;
i++,
sp += 2)
3547 v = (png_uint_16)(((*
sp) << 8) + *(
sp + 1));
3549 if (
v ==
png_ptr->trans_color.gray)
3552 *
sp = (png_byte)((
png_ptr->background.gray >> 8)
3554 *(
sp + 1) = (png_byte)(
png_ptr->background.gray
3560 v = gamma_16[*(
sp + 1) >> gamma_shift][*
sp];
3561 *
sp = (png_byte)((
v >> 8) & 0xff);
3562 *(
sp + 1) = (png_byte)(
v & 0xff);
3570 for (
i = 0;
i < row_width;
i++,
sp += 2)
3574 v = (png_uint_16)(((*
sp) << 8) + *(
sp + 1));
3576 if (
v ==
png_ptr->trans_color.gray)
3578 *
sp = (png_byte)((
png_ptr->background.gray >> 8)
3580 *(
sp + 1) = (png_byte)(
png_ptr->background.gray
3598#ifdef PNG_READ_GAMMA_SUPPORTED
3599 if (gamma_table !=
NULL)
3602 for (
i = 0;
i < row_width;
i++,
sp += 3)
3605 *(
sp + 1) ==
png_ptr->trans_color.green &&
3608 *
sp = (png_byte)
png_ptr->background.red;
3609 *(
sp + 1) = (png_byte)
png_ptr->background.green;
3610 *(
sp + 2) = (png_byte)
png_ptr->background.blue;
3615 *
sp = gamma_table[*
sp];
3616 *(
sp + 1) = gamma_table[*(
sp + 1)];
3617 *(
sp + 2) = gamma_table[*(
sp + 2)];
3625 for (
i = 0;
i < row_width;
i++,
sp += 3)
3628 *(
sp + 1) ==
png_ptr->trans_color.green &&
3631 *
sp = (png_byte)
png_ptr->background.red;
3632 *(
sp + 1) = (png_byte)
png_ptr->background.green;
3633 *(
sp + 2) = (png_byte)
png_ptr->background.blue;
3640#ifdef PNG_READ_GAMMA_SUPPORTED
3641 if (gamma_16 !=
NULL)
3644 for (
i = 0;
i < row_width;
i++,
sp += 6)
3646 png_uint_16
r = (png_uint_16)(((*
sp) << 8) + *(
sp + 1));
3648 png_uint_16
g = (png_uint_16)(((*(
sp + 2)) << 8)
3651 png_uint_16
b = (png_uint_16)(((*(
sp + 4)) << 8)
3654 if (
r ==
png_ptr->trans_color.red &&
3659 *
sp = (png_byte)((
png_ptr->background.red >> 8) & 0xff);
3660 *(
sp + 1) = (png_byte)(
png_ptr->background.red & 0xff);
3661 *(
sp + 2) = (png_byte)((
png_ptr->background.green >> 8)
3663 *(
sp + 3) = (png_byte)(
png_ptr->background.green
3665 *(
sp + 4) = (png_byte)((
png_ptr->background.blue >> 8)
3667 *(
sp + 5) = (png_byte)(
png_ptr->background.blue & 0xff);
3672 png_uint_16
v = gamma_16[*(
sp + 1) >> gamma_shift][*
sp];
3673 *
sp = (png_byte)((
v >> 8) & 0xff);
3674 *(
sp + 1) = (png_byte)(
v & 0xff);
3676 v = gamma_16[*(
sp + 3) >> gamma_shift][*(
sp + 2)];
3677 *(
sp + 2) = (png_byte)((
v >> 8) & 0xff);
3678 *(
sp + 3) = (png_byte)(
v & 0xff);
3680 v = gamma_16[*(
sp + 5) >> gamma_shift][*(
sp + 4)];
3681 *(
sp + 4) = (png_byte)((
v >> 8) & 0xff);
3682 *(
sp + 5) = (png_byte)(
v & 0xff);
3691 for (
i = 0;
i < row_width;
i++,
sp += 6)
3693 png_uint_16
r = (png_uint_16)(((*
sp) << 8) + *(
sp + 1));
3695 png_uint_16
g = (png_uint_16)(((*(
sp + 2)) << 8)
3698 png_uint_16
b = (png_uint_16)(((*(
sp + 4)) << 8)
3701 if (
r ==
png_ptr->trans_color.red &&
3705 *
sp = (png_byte)((
png_ptr->background.red >> 8) & 0xff);
3706 *(
sp + 1) = (png_byte)(
png_ptr->background.red & 0xff);
3707 *(
sp + 2) = (png_byte)((
png_ptr->background.green >> 8)
3709 *(
sp + 3) = (png_byte)(
png_ptr->background.green
3711 *(
sp + 4) = (png_byte)((
png_ptr->background.blue >> 8)
3713 *(
sp + 5) = (png_byte)(
png_ptr->background.blue & 0xff);
3725#ifdef PNG_READ_GAMMA_SUPPORTED
3726 if (gamma_to_1 !=
NULL && gamma_from_1 !=
NULL &&
3727 gamma_table !=
NULL)
3730 for (
i = 0;
i < row_width;
i++,
sp += 2)
3732 png_uint_16
a = *(
sp + 1);
3735 *
sp = gamma_table[*
sp];
3740 *
sp = (png_byte)
png_ptr->background.gray;
3747 v = gamma_to_1[*
sp];
3750 w = gamma_from_1[
w];
3759 for (
i = 0;
i < row_width;
i++,
sp += 2)
3761 png_byte
a = *(
sp + 1);
3764 *
sp = (png_byte)
png_ptr->background.gray;
3773#ifdef PNG_READ_GAMMA_SUPPORTED
3774 if (gamma_16 !=
NULL && gamma_16_from_1 !=
NULL &&
3775 gamma_16_to_1 !=
NULL)
3778 for (
i = 0;
i < row_width;
i++,
sp += 4)
3780 png_uint_16
a = (png_uint_16)(((*(
sp + 2)) << 8)
3783 if (
a == (png_uint_16)0xffff)
3787 v = gamma_16[*(
sp + 1) >> gamma_shift][*
sp];
3788 *
sp = (png_byte)((
v >> 8) & 0xff);
3789 *(
sp + 1) = (png_byte)(
v & 0xff);
3795 *
sp = (png_byte)((
png_ptr->background.gray >> 8)
3797 *(
sp + 1) = (png_byte)(
png_ptr->background.gray & 0xff);
3802 png_uint_16
g,
v,
w;
3804 g = gamma_16_to_1[*(
sp + 1) >> gamma_shift][*
sp];
3809 w = gamma_16_from_1[(
v & 0xff) >>
3810 gamma_shift][
v >> 8];
3811 *
sp = (png_byte)((
w >> 8) & 0xff);
3812 *(
sp + 1) = (png_byte)(
w & 0xff);
3820 for (
i = 0;
i < row_width;
i++,
sp += 4)
3822 png_uint_16
a = (png_uint_16)(((*(
sp + 2)) << 8)
3827 *
sp = (png_byte)((
png_ptr->background.gray >> 8)
3829 *(
sp + 1) = (png_byte)(
png_ptr->background.gray & 0xff);
3832 else if (
a < 0xffff)
3836 g = (png_uint_16)(((*
sp) << 8) + *(
sp + 1));
3838 *
sp = (png_byte)((
v >> 8) & 0xff);
3839 *(
sp + 1) = (png_byte)(
v & 0xff);
3851#ifdef PNG_READ_GAMMA_SUPPORTED
3852 if (gamma_to_1 !=
NULL && gamma_from_1 !=
NULL &&
3853 gamma_table !=
NULL)
3856 for (
i = 0;
i < row_width;
i++,
sp += 4)
3858 png_byte
a = *(
sp + 3);
3862 *
sp = gamma_table[*
sp];
3863 *(
sp + 1) = gamma_table[*(
sp + 1)];
3864 *(
sp + 2) = gamma_table[*(
sp + 2)];
3870 *
sp = (png_byte)
png_ptr->background.red;
3871 *(
sp + 1) = (png_byte)
png_ptr->background.green;
3872 *(
sp + 2) = (png_byte)
png_ptr->background.blue;
3879 v = gamma_to_1[*
sp];
3881 if (optimize == 0)
w = gamma_from_1[
w];
3884 v = gamma_to_1[*(
sp + 1)];
3886 if (optimize == 0)
w = gamma_from_1[
w];
3889 v = gamma_to_1[*(
sp + 2)];
3891 if (optimize == 0)
w = gamma_from_1[
w];
3900 for (
i = 0;
i < row_width;
i++,
sp += 4)
3902 png_byte
a = *(
sp + 3);
3906 *
sp = (png_byte)
png_ptr->background.red;
3907 *(
sp + 1) = (png_byte)
png_ptr->background.green;
3908 *(
sp + 2) = (png_byte)
png_ptr->background.blue;
3926#ifdef PNG_READ_GAMMA_SUPPORTED
3927 if (gamma_16 !=
NULL && gamma_16_from_1 !=
NULL &&
3928 gamma_16_to_1 !=
NULL)
3931 for (
i = 0;
i < row_width;
i++,
sp += 8)
3933 png_uint_16
a = (png_uint_16)(((png_uint_16)(*(
sp + 6))
3934 << 8) + (png_uint_16)(*(
sp + 7)));
3936 if (
a == (png_uint_16)0xffff)
3940 v = gamma_16[*(
sp + 1) >> gamma_shift][*
sp];
3941 *
sp = (png_byte)((
v >> 8) & 0xff);
3942 *(
sp + 1) = (png_byte)(
v & 0xff);
3944 v = gamma_16[*(
sp + 3) >> gamma_shift][*(
sp + 2)];
3945 *(
sp + 2) = (png_byte)((
v >> 8) & 0xff);
3946 *(
sp + 3) = (png_byte)(
v & 0xff);
3948 v = gamma_16[*(
sp + 5) >> gamma_shift][*(
sp + 4)];
3949 *(
sp + 4) = (png_byte)((
v >> 8) & 0xff);
3950 *(
sp + 5) = (png_byte)(
v & 0xff);
3956 *
sp = (png_byte)((
png_ptr->background.red >> 8) & 0xff);
3957 *(
sp + 1) = (png_byte)(
png_ptr->background.red & 0xff);
3958 *(
sp + 2) = (png_byte)((
png_ptr->background.green >> 8)
3960 *(
sp + 3) = (png_byte)(
png_ptr->background.green
3962 *(
sp + 4) = (png_byte)((
png_ptr->background.blue >> 8)
3964 *(
sp + 5) = (png_byte)(
png_ptr->background.blue & 0xff);
3971 v = gamma_16_to_1[*(
sp + 1) >> gamma_shift][*
sp];
3974 w = gamma_16_from_1[((
w & 0xff) >> gamma_shift)][
w >>
3976 *
sp = (png_byte)((
w >> 8) & 0xff);
3977 *(
sp + 1) = (png_byte)(
w & 0xff);
3979 v = gamma_16_to_1[*(
sp + 3) >> gamma_shift][*(
sp + 2)];
3982 w = gamma_16_from_1[((
w & 0xff) >> gamma_shift)][
w >>
3985 *(
sp + 2) = (png_byte)((
w >> 8) & 0xff);
3986 *(
sp + 3) = (png_byte)(
w & 0xff);
3988 v = gamma_16_to_1[*(
sp + 5) >> gamma_shift][*(
sp + 4)];
3991 w = gamma_16_from_1[((
w & 0xff) >> gamma_shift)][
w >>
3994 *(
sp + 4) = (png_byte)((
w >> 8) & 0xff);
3995 *(
sp + 5) = (png_byte)(
w & 0xff);
4004 for (
i = 0;
i < row_width;
i++,
sp += 8)
4006 png_uint_16
a = (png_uint_16)(((png_uint_16)(*(
sp + 6))
4007 << 8) + (png_uint_16)(*(
sp + 7)));
4011 *
sp = (png_byte)((
png_ptr->background.red >> 8) & 0xff);
4012 *(
sp + 1) = (png_byte)(
png_ptr->background.red & 0xff);
4013 *(
sp + 2) = (png_byte)((
png_ptr->background.green >> 8)
4015 *(
sp + 3) = (png_byte)(
png_ptr->background.green
4017 *(
sp + 4) = (png_byte)((
png_ptr->background.blue >> 8)
4019 *(
sp + 5) = (png_byte)(
png_ptr->background.blue & 0xff);
4022 else if (
a < 0xffff)
4026 png_uint_16
r = (png_uint_16)(((*
sp) << 8) + *(
sp + 1));
4027 png_uint_16
g = (png_uint_16)(((*(
sp + 2)) << 8)
4029 png_uint_16
b = (png_uint_16)(((*(
sp + 4)) << 8)
4033 *
sp = (png_byte)((
v >> 8) & 0xff);
4034 *(
sp + 1) = (png_byte)(
v & 0xff);
4037 *(
sp + 2) = (png_byte)((
v >> 8) & 0xff);
4038 *(
sp + 3) = (png_byte)(
v & 0xff);
4041 *(
sp + 4) = (png_byte)((
v >> 8) & 0xff);
4042 *(
sp + 5) = (png_byte)(
v & 0xff);
4056#ifdef PNG_READ_GAMMA_SUPPORTED
4068 int gamma_shift =
png_ptr->gamma_shift;
4086 for (
i = 0;
i < row_width;
i++)
4088 *
sp = gamma_table[*
sp];
4090 *
sp = gamma_table[*
sp];
4092 *
sp = gamma_table[*
sp];
4100 for (
i = 0;
i < row_width;
i++)
4104 v = gamma_16_table[*(
sp + 1) >> gamma_shift][*
sp];
4105 *
sp = (png_byte)((
v >> 8) & 0xff);
4106 *(
sp + 1) = (png_byte)(
v & 0xff);
4109 v = gamma_16_table[*(
sp + 1) >> gamma_shift][*
sp];
4110 *
sp = (png_byte)((
v >> 8) & 0xff);
4111 *(
sp + 1) = (png_byte)(
v & 0xff);
4114 v = gamma_16_table[*(
sp + 1) >> gamma_shift][*
sp];
4115 *
sp = (png_byte)((
v >> 8) & 0xff);
4116 *(
sp + 1) = (png_byte)(
v & 0xff);
4128 for (
i = 0;
i < row_width;
i++)
4130 *
sp = gamma_table[*
sp];
4133 *
sp = gamma_table[*
sp];
4136 *
sp = gamma_table[*
sp];
4146 for (
i = 0;
i < row_width;
i++)
4148 png_uint_16
v = gamma_16_table[*(
sp + 1) >> gamma_shift][*
sp];
4149 *
sp = (png_byte)((
v >> 8) & 0xff);
4150 *(
sp + 1) = (png_byte)(
v & 0xff);
4153 v = gamma_16_table[*(
sp + 1) >> gamma_shift][*
sp];
4154 *
sp = (png_byte)((
v >> 8) & 0xff);
4155 *(
sp + 1) = (png_byte)(
v & 0xff);
4158 v = gamma_16_table[*(
sp + 1) >> gamma_shift][*
sp];
4159 *
sp = (png_byte)((
v >> 8) & 0xff);
4160 *(
sp + 1) = (png_byte)(
v & 0xff);
4172 for (
i = 0;
i < row_width;
i++)
4174 *
sp = gamma_table[*
sp];
4182 for (
i = 0;
i < row_width;
i++)
4184 png_uint_16
v = gamma_16_table[*(
sp + 1) >> gamma_shift][*
sp];
4185 *
sp = (png_byte)((
v >> 8) & 0xff);
4186 *(
sp + 1) = (png_byte)(
v & 0xff);
4198 for (
i = 0;
i < row_width;
i += 4)
4206 ((((
int)gamma_table[
a|(
a>>2)|(
a>>4)|(
a>>6)]) ) & 0xc0)|
4207 ((((
int)gamma_table[(
b<<2)|
b|(
b>>2)|(
b>>4)])>>2) & 0x30)|
4208 ((((
int)gamma_table[(
c<<4)|(
c<<2)|
c|(
c>>2)])>>4) & 0x0c)|
4209 ((((
int)gamma_table[(
d<<6)|(
d<<4)|(
d<<2)|
d])>>6) ));
4217 for (
i = 0;
i < row_width;
i += 2)
4219 int msb = *
sp & 0xf0;
4220 int lsb = *
sp & 0x0f;
4222 *
sp = (png_byte)((((
int)gamma_table[msb | (msb >> 4)]) & 0xf0)
4223 | (((
int)gamma_table[(lsb << 4) | lsb]) >> 4));
4231 for (
i = 0;
i < row_width;
i++)
4233 *
sp = gamma_table[*
sp];
4241 for (
i = 0;
i < row_width;
i++)
4243 png_uint_16
v = gamma_16_table[*(
sp + 1) >> gamma_shift][*
sp];
4244 *
sp = (png_byte)((
v >> 8) & 0xff);
4245 *(
sp + 1) = (png_byte)(
v & 0xff);
4259#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
4284 for (; row_width > 0; --row_width,
row += step)
4294 int gamma_shift =
png_ptr->gamma_shift;
4303 for (; row_width > 0; --row_width,
row += step)
4308 *
row = (png_byte)((
v >> 8) & 0xff);
4309 *(
row + 1) = (png_byte)(
v & 0xff);
4320 png_warning(
png_ptr,
"png_do_encode_alpha: unexpected call");
4324#ifdef PNG_READ_EXPAND_SUPPORTED
4338 png_debug(1,
"in png_do_expand_palette");
4350 shift = 7 - (
int)((row_width + 7) & 0x07);
4351 for (
i = 0;
i < row_width;
i++)
4377 shift = (
int)((3 - ((row_width + 3) & 0x03)) << 1);
4378 for (
i = 0;
i < row_width;
i++)
4381 *dp = (png_byte)
value;
4400 shift = (
int)((row_width & 0x01) << 2);
4401 for (
i = 0;
i < row_width;
i++)
4404 *dp = (png_byte)
value;
4433 dp =
row + ((
size_t)row_width << 2) - 1;
4436#ifdef PNG_ARM_NEON_INTRINSICS_AVAILABLE
4443 i = png_do_expand_palette_rgba8_neon(
png_ptr, row_info,
row,
4450 for (;
i < row_width;
i++)
4452 if ((
int)(*
sp) >= num_trans)
4455 *dp-- = trans_alpha[*
sp];
4463 row_info->
rowbytes = row_width * 4;
4473#ifdef PNG_ARM_NEON_INTRINSICS_AVAILABLE
4474 i = png_do_expand_palette_rgb8_neon(
png_ptr, row_info,
row,
4480 for (;
i < row_width;
i++)
4490 row_info->
rowbytes = row_width * 3;
4515 unsigned int gray = trans_color !=
NULL ? trans_color->
gray : 0;
4523 gray = (gray & 0x01) * 0xff;
4526 shift = 7 - (
int)((row_width + 7) & 0x07);
4527 for (
i = 0;
i < row_width;
i++)
4551 gray = (gray & 0x03) * 0x55;
4554 shift = (
int)((3 - ((row_width + 3) & 0x03)) << 1);
4555 for (
i = 0;
i < row_width;
i++)
4576 gray = (gray & 0x0f) * 0x11;
4579 shift = (
int)((1 - ((row_width + 1) & 0x01)) << 2);
4580 for (
i = 0;
i < row_width;
i++)
4607 if (trans_color !=
NULL)
4613 dp =
row + ((
size_t)row_width << 1) - 1;
4615 for (
i = 0;
i < row_width;
i++)
4617 if ((*
sp & 0xffU) == gray)
4629 unsigned int gray_high = (gray >> 8) & 0xff;
4630 unsigned int gray_low = gray & 0xff;
4633 for (
i = 0;
i < row_width;
i++)
4635 if ((*(
sp - 1) & 0xffU) == gray_high &&
4636 (*(
sp) & 0xffU) == gray_low)
4661 trans_color !=
NULL)
4665 png_byte
red = (png_byte)(trans_color->
red & 0xff);
4666 png_byte
green = (png_byte)(trans_color->
green & 0xff);
4667 png_byte
blue = (png_byte)(trans_color->
blue & 0xff);
4669 dp =
row + ((
size_t)row_width << 2) - 1;
4670 for (
i = 0;
i < row_width;
i++)
4685 png_byte red_high = (png_byte)((trans_color->
red >> 8) & 0xff);
4686 png_byte green_high = (png_byte)((trans_color->
green >> 8) & 0xff);
4687 png_byte blue_high = (png_byte)((trans_color->
blue >> 8) & 0xff);
4688 png_byte red_low = (png_byte)(trans_color->
red & 0xff);
4689 png_byte green_low = (png_byte)(trans_color->
green & 0xff);
4690 png_byte blue_low = (png_byte)(trans_color->
blue & 0xff);
4692 dp =
row + ((
size_t)row_width << 3) - 1;
4693 for (
i = 0;
i < row_width;
i++)
4695 if (*(
sp - 5) == red_high &&
4696 *(
sp - 4) == red_low &&
4697 *(
sp - 3) == green_high &&
4698 *(
sp - 2) == green_low &&
4699 *(
sp - 1) == blue_high &&
4728#ifdef PNG_READ_EXPAND_16_SUPPORTED
4751 dp[-2] = dp[-1] = *--
sp; dp -= 2;
4761#ifdef PNG_READ_QUANTIZE_SUPPORTED
4779 for (
i = 0;
i < row_width;
i++)
4801 *dp++ = palette_lookup[
p];
4811 palette_lookup !=
NULL)
4816 for (
i = 0;
i < row_width;
i++)
4832 *dp++ = palette_lookup[
p];
4846 for (
i = 0;
i < row_width;
i++,
sp++)
4848 *
sp = quantize_lookup[*
sp];
4862 png_debug(1,
"in png_do_read_transformations");
4870 png_error(
png_ptr,
"NULL row buffer");
4886 png_error(
png_ptr,
"Uninitialized row");
4889#ifdef PNG_READ_EXPAND_SUPPORTED
4894#ifdef PNG_ARM_NEON_INTRINSICS_AVAILABLE
4902 png_riffle_palette_neon(
png_ptr);
4912 if (
png_ptr->num_trans != 0 &&
4914 png_do_expand(row_info,
png_ptr->row_buf + 1,
4918 png_do_expand(row_info,
png_ptr->row_buf + 1,
NULL);
4923#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
4928 png_do_strip_channel(row_info,
png_ptr->row_buf + 1,
4932#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
4936 png_do_rgb_to_gray(
png_ptr, row_info,
4941 png_ptr->rgb_to_gray_status=1;
4944 png_warning(
png_ptr,
"png_do_rgb_to_gray found nongray pixel");
4948 png_error(
png_ptr,
"png_do_rgb_to_gray found nongray pixel");
4984#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
4990 png_do_gray_to_rgb(row_info,
png_ptr->row_buf + 1);
4993#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
4994 defined(PNG_READ_ALPHA_MODE_SUPPORTED)
4999#ifdef PNG_READ_GAMMA_SUPPORTED
5021#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
5026 png_do_strip_channel(row_info,
png_ptr->row_buf + 1,
5030#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
5036#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
5038 png_do_scale_16_to_8(row_info,
png_ptr->row_buf + 1);
5041#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
5047 png_do_chop(row_info,
png_ptr->row_buf + 1);
5050#ifdef PNG_READ_QUANTIZE_SUPPORTED
5052 png_do_quantize(row_info,
png_ptr->row_buf + 1,
5056#ifdef PNG_READ_EXPAND_16_SUPPORTED
5063 png_do_expand_16(row_info,
png_ptr->row_buf + 1);
5066#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
5070 png_do_gray_to_rgb(row_info,
png_ptr->row_buf + 1);
5073#ifdef PNG_READ_INVERT_SUPPORTED
5075 png_do_invert(row_info,
png_ptr->row_buf + 1);
5078#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
5080 png_do_read_invert_alpha(row_info,
png_ptr->row_buf + 1);
5083#ifdef PNG_READ_SHIFT_SUPPORTED
5085 png_do_unshift(row_info,
png_ptr->row_buf + 1,
5089#ifdef PNG_READ_PACK_SUPPORTED
5091 png_do_unpack(row_info,
png_ptr->row_buf + 1);
5094#ifdef PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED
5097 png_ptr->num_palette_max >= 0)
5098 png_do_check_palette_indexes(
png_ptr, row_info);
5101#ifdef PNG_READ_BGR_SUPPORTED
5103 png_do_bgr(row_info,
png_ptr->row_buf + 1);
5106#ifdef PNG_READ_PACKSWAP_SUPPORTED
5108 png_do_packswap(row_info,
png_ptr->row_buf + 1);
5111#ifdef PNG_READ_FILLER_SUPPORTED
5113 png_do_read_filler(row_info,
png_ptr->row_buf + 1,
5117#ifdef PNG_READ_SWAP_ALPHA_SUPPORTED
5119 png_do_read_swap_alpha(row_info,
png_ptr->row_buf + 1);
5122#ifdef PNG_READ_16BIT_SUPPORTED
5123#ifdef PNG_READ_SWAP_SUPPORTED
5125 png_do_swap(row_info,
png_ptr->row_buf + 1);
5129#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
5133 (*(
png_ptr->read_user_transform_fn))
5143#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
5144 if (
png_ptr->user_transform_depth != 0)
5145 row_info->bit_depth =
png_ptr->user_transform_depth;
5147 if (
png_ptr->user_transform_channels != 0)
5148 row_info->channels =
png_ptr->user_transform_channels;
5150 row_info->pixel_depth = (png_byte)(row_info->bit_depth *
5151 row_info->channels);
5153 row_info->rowbytes =
PNG_ROWBYTES(row_info->pixel_depth, row_info->width);
_ACRTIMP double __cdecl floor(double)
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 *
GLdouble GLdouble GLdouble r
GLboolean GLboolean GLboolean b
GLsizei GLsizei GLfloat distance
GLboolean GLboolean GLboolean GLboolean a
GLubyte GLubyte GLubyte GLubyte w
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
#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]
#define PNG_ERROR_ACTION_ERROR
png_structrp png_fixed_point screen_gamma
png_set_rgb_to_gray_fixed
png_structrp png_const_color_16p int background_gamma_code
#define PNG_MAX_PALETTE_LENGTH
#define png_composite(composite, fg, alpha, bg)
#define PNG_ERROR_ACTION_NONE
#define PNG_CRC_WARN_DISCARD
#define PNG_ERROR_ACTION_WARN
#define PNG_ALPHA_ASSOCIATED
#define PNG_CRC_QUIET_USE
#define PNG_COLOR_MASK_COLOR
#define PNG_COLOR_MASK_PALETTE
#define png_composite_16(composite, fg, alpha, bg)
#define PNG_COLOR_MASK_ALPHA
#define PNG_ALPHA_OPTIMIZED
#define PNG_BACKGROUND_GAMMA_UNIQUE
png_structrp int error_action
#define PNG_BACKGROUND_GAMMA_UNKNOWN
const png_struct *PNG_RESTRICT png_const_structrp
#define PNG_CRC_ERROR_QUIT
png_structrp png_const_color_16p int int need_expand
#define PNG_BACKGROUND_GAMMA_FILE
png_structrp png_const_color_16p background_color
#define PNG_CRC_NO_CHANGE
png_info *PNG_RESTRICT png_inforp
#define PNG_BACKGROUND_GAMMA_SCREEN
png_struct *PNG_RESTRICT png_structrp
png_const_structrp png_const_inforp info_ptr
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_16pp
#define PNG_READ_BACKGROUND_SUPPORTED
#define PNG_READ_ALPHA_MODE_SUPPORTED
#define PNG_QUANTIZE_BLUE_BITS
#define PNG_QUANTIZE_GREEN_BITS
#define PNG_READ_FILLER_SUPPORTED
#define PNG_READ_STRIP_ALPHA_SUPPORTED
#define PNG_QUANTIZE_RED_BITS
#define PNG_READ_RGB_TO_GRAY_SUPPORTED
#define PNG_SCALE_16_TO_8
#define PNG_UNUSED(param)
#define PNG_FLAG_OPTIMIZE_ALPHA
#define PNG_RGB_TO_GRAY_ERR
#define PNG_ROWBYTES(pixel_bits, width)
#define png_fixed_error(s1, s2)
#define PNG_FLAG_CRC_CRITICAL_USE
#define PNG_FLAG_CRC_ANCILLARY_USE
#define png_app_error(pp, s)
#define png_app_warning(pp, s)
#define PNG_FLAG_CRC_ANCILLARY_NOWARN
#define PNG_USER_TRANSFORM
#define PNG_BACKGROUND_EXPAND
const png_uint_16p * png_const_uint_16pp
#define PNG_FLAG_CRC_CRITICAL_IGNORE
#define PNG_COLOR_DIST(c1, c2)
#define PNG_FLAG_FILLER_AFTER
#define PNG_GAMMA_sRGB_INVERSE
#define PNG_GAMMA_MAC_OLD
#define PNG_FLAG_ROW_INIT
#define PNG_GAMMA_MAC_INVERSE
#define PNG_FLAG_DETECT_UNINITIALIZED
#define PNG_RGB_TO_GRAY_WARN
#define PNG_BACKGROUND_IS_GRAY
#define PNG_LIB_GAMMA_MAX
static unsigned __int64 next