Lines Matching full:png_ptr
25 png_set_crc_action(png_structrp png_ptr, int crit_action, int ancil_action)
29 if (png_ptr == NULL)
39 png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
40 png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE;
44 png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
45 png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE |
50 png_warning(png_ptr,
57 png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
68 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
69 png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE;
73 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
74 png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE |
79 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
80 png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_NOWARN;
87 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
99 png_rtran_ok(png_structrp png_ptr, int need_IHDR)
101 if (png_ptr != NULL)
103 if ((png_ptr->flags & PNG_FLAG_ROW_INIT) != 0)
104 png_app_error(png_ptr,
107 else if (need_IHDR && (png_ptr->mode & PNG_HAVE_IHDR) == 0)
108 png_app_error(png_ptr, "invalid before the PNG header has been read");
113 png_ptr->flags |= PNG_FLAG_DETECT_UNINITIALIZED;
126 png_set_background_fixed(png_structrp png_ptr,
132 if (png_rtran_ok(png_ptr, 0) == 0 || background_color == NULL)
137 png_warning(png_ptr, "Application must supply a known background gamma");
141 png_ptr->transformations |= PNG_COMPOSE | PNG_STRIP_ALPHA;
142 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
143 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
145 png_ptr->background = *background_color;
146 png_ptr->background_gamma = background_gamma;
147 png_ptr->background_gamma_type = (png_byte)(background_gamma_code);
149 png_ptr->transformations |= PNG_BACKGROUND_EXPAND;
151 png_ptr->transformations &= ~PNG_BACKGROUND_EXPAND;
156 png_set_background(png_structrp png_ptr,
160 png_set_background_fixed(png_ptr, background_color, background_gamma_code,
161 need_expand, png_fixed(png_ptr, background_gamma, "png_set_background"));
172 png_set_scale_16(png_structrp png_ptr)
176 if (png_rtran_ok(png_ptr, 0) == 0)
179 png_ptr->transformations |= PNG_SCALE_16_TO_8;
186 png_set_strip_16(png_structrp png_ptr)
190 if (png_rtran_ok(png_ptr, 0) == 0)
193 png_ptr->transformations |= PNG_16_TO_8;
199 png_set_strip_alpha(png_structrp png_ptr)
203 if (png_rtran_ok(png_ptr, 0) == 0)
206 png_ptr->transformations |= PNG_STRIP_ALPHA;
212 translate_gamma_flags(png_structrp png_ptr, png_fixed_point output_gamma,
227 png_ptr->flags |= PNG_FLAG_ASSUME_sRGB;
229 PNG_UNUSED(png_ptr)
251 convert_gamma_value(png_structrp png_ptr, double output_gamma)
267 png_fixed_error(png_ptr, "gamma value");
276 png_set_alpha_mode_fixed(png_structrp png_ptr, int mode,
284 if (png_rtran_ok(png_ptr, 0) == 0)
287 output_gamma = translate_gamma_flags(png_ptr, output_gamma, 1/*screen*/);
299 png_error(png_ptr, "output gamma out of expected range");
326 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
327 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
332 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
333 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
340 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
341 png_ptr->flags |= PNG_FLAG_OPTIMIZE_ALPHA;
347 png_ptr->transformations |= PNG_ENCODE_ALPHA;
348 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
352 png_error(png_ptr, "invalid alpha mode");
359 if (png_ptr->colorspace.gamma == 0)
361 png_ptr->colorspace.gamma = file_gamma;
362 png_ptr->colorspace.flags |= PNG_COLORSPACE_HAVE_GAMMA;
366 png_ptr->screen_gamma = output_gamma;
374 memset(&png_ptr->background, 0, (sizeof png_ptr->background));
375 png_ptr->background_gamma = png_ptr->colorspace.gamma; /* just in case */
376 png_ptr->background_gamma_type = PNG_BACKGROUND_GAMMA_FILE;
377 png_ptr->transformations &= ~PNG_BACKGROUND_EXPAND;
379 if ((png_ptr->transformations & PNG_COMPOSE) != 0)
380 png_error(png_ptr,
383 png_ptr->transformations |= PNG_COMPOSE;
389 png_set_alpha_mode(png_structrp png_ptr, int mode, double output_gamma)
391 png_set_alpha_mode_fixed(png_ptr, mode, convert_gamma_value(png_ptr,
417 png_set_quantize(png_structrp png_ptr, png_colorp palette,
423 if (png_rtran_ok(png_ptr, 0) == 0)
426 png_ptr->transformations |= PNG_QUANTIZE;
432 png_ptr->quantize_index = (png_bytep)png_malloc(png_ptr,
435 png_ptr->quantize_index[i] = (png_byte)i;
449 png_ptr->quantize_sort = (png_bytep)png_malloc(png_ptr,
454 png_ptr->quantize_sort[i] = (png_byte)i;
471 if (histogram[png_ptr->quantize_sort[j]]
472 < histogram[png_ptr->quantize_sort[j + 1]])
476 t = png_ptr->quantize_sort[j];
477 png_ptr->quantize_sort[j] = png_ptr->quantize_sort[j + 1];
478 png_ptr->quantize_sort[j + 1] = t;
497 if ((int)png_ptr
501 while ((int)png_ptr->quantize_sort[j] >= maximum_colors);
517 if ((int)png_ptr->quantize_sort[i] >= maximum_colors)
523 while ((int)png_ptr->quantize_sort[j] >= maximum_colors);
529 png_ptr->quantize_index[j] = (png_byte)i;
530 png_ptr->quantize_index[i] = (png_byte)j;
537 if ((int)png_ptr->quantize_index[i] >= maximum_colors)
542 d_index = png_ptr->quantize_index[i];
557 png_ptr->quantize_index[i] = (png_byte)min_k;
561 png_free(png_ptr, png_ptr->quantize_sort);
562 png_ptr->quantize_sort = NULL;
583 png_ptr->index_to_palette = (png_bytep)png_malloc(png_ptr,
586 png_ptr->palette_to_index = (png_bytep)png_malloc(png_ptr,
593 png_ptr->index_to_palette[i] = (png_byte)i;
594 png_ptr->palette_to_index[i] = (png_byte)i;
597 hash = (png_dsortpp)png_calloc(png_ptr, (png_alloc_size_t)(769 *
627 t = (png_dsortp)png_malloc_warn(png_ptr,
652 if ((int)png_ptr->index_to_palette[p->left]
654 (int)png_ptr->index_to_palette[p->right]
671 palette[png_ptr->index_to_palette[j]]
679 if (png_ptr->quantize_index[k] ==
680 png_ptr->index_to_palette[j])
681 png_ptr->quantize_index[k] =
682 png_ptr->index_to_palette[next_j];
684 if ((int)png_ptr->quantize_index[k] ==
686 png_ptr->quantize_index[k] =
687 png_ptr->index_to_palette[j];
691 png_ptr->index_to_palette[png_ptr->palette_to_index
692 [num_new_palette]] = png_ptr->index_to_palette[j];
694 png_ptr->palette_to_index[png_ptr->index_to_palette[j]]
695 = png_ptr->palette_to_index[num_new_palette];
697 png_ptr->index_to_palette[j] =
700 png_ptr->palette_to_index[num_new_palette] =
719 png_free(png_ptr, p);
727 png_free(png_ptr, hash);
728 png_free(png_ptr, png_ptr->palette_to_index);
729 png_free(png_ptr, png_ptr->index_to_palette);
730 png_ptr->palette_to_index = NULL;
731 png_ptr->index_to_palette = NULL;
735 if (png_ptr->palette == NULL)
737 png_ptr->palette = palette;
739 png_ptr->num_palette = (png_uint_16)num_palette;
752 png_ptr->palette_lookup = (png_bytep)png_calloc(png_ptr,
755 distance = (png_bytep)png_malloc(png_ptr, (png_alloc_size_t)(num_entries *
793 png_ptr->palette_lookup[d_index] = (png_byte)i;
800 png_free(png_ptr, distance);
807 png_set_gamma_fixed(png_structrp png_ptr, png_fixed_point scrn_gamma,
812 if (png_rtran_ok(png_ptr, 0) == 0)
816 scrn_gamma = translate_gamma_flags(png_ptr, scrn_gamma, 1/*screen*/);
817 file_gamma = translate_gamma_flags(png_ptr, file_gamma, 0/*file*/);
831 png_error(png_ptr, "invalid file gamma in png_set_gamma");
834 png_error(png_ptr, "invalid screen gamma in png_set_gamma");
840 png_ptr->colorspace.gamma = file_gamma;
841 png_ptr->colorspace.flags |= PNG_COLORSPACE_HAVE_GAMMA;
842 png_ptr->screen_gamma = scrn_gamma;
847 png_set_gamma(png_structrp png_ptr, double scrn_gamma, double file_gamma)
849 png_set_gamma_fixed(png_ptr, convert_gamma_value(png_ptr, scrn_gamma),
850 convert_gamma_value(png_ptr, file_gamma));
861 png_set_expand(png_structrp png_ptr)
865 if (png_rtran_ok(png_ptr, 0) == 0)
868 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
891 png_set_palette_to_rgb(png_structrp png_ptr)
895 if (png_rtran_ok(png_ptr, 0) == 0)
898 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
903 png_set_expand_gray_1_2_4_to_8(png_structrp png_ptr)
907 if (png_rtran_ok(png_ptr, 0) == 0)
910 png_ptr->transformations |= PNG_EXPAND;
915 png_set_tRNS_to_alpha(png_structrp png_ptr)
919 if (png_rtran_ok(png_ptr, 0) == 0)
922 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
931 png_set_expand_16(png_structrp png_ptr)
935 if (png_rtran_ok(png_ptr, 0) == 0)
938 png_ptr->transformations |= (PNG_EXPAND_16 | PNG_EXPAND | PNG_EXPAND_tRNS);
944 png_set_gray_to_rgb(png_structrp png_ptr)
948 if (png_rtran_ok(png_ptr, 0) == 0)
952 png_set_expand_gray_1_2_4_to_8(png_ptr);
953 png_ptr->transformations |= PNG_GRAY_TO_RGB;
959 png_set_rgb_to_gray_fixed(png_structrp png_ptr, int error_action,
966 if (png_rtran_ok(png_ptr, 1) == 0)
972 png_ptr->transformations |= PNG_RGB_TO_GRAY;
976 png_ptr->transformations |= PNG_RGB_TO_GRAY_WARN;
980 png_ptr->transformations |= PNG_RGB_TO_GRAY_ERR;
984 png_error(png_ptr, "invalid error action to rgb_to_gray");
987 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
989 png_ptr->transformations |= PNG_EXPAND;
995 png_error(png_ptr,
998 /* png_ptr->transformations &= ~PNG_RGB_TO_GRAY; */
1014 png_ptr->rgb_to_gray_red_coeff = red_int;
1015 png_ptr->rgb_to_gray_green_coeff = green_int;
1016 png_ptr->rgb_to_gray_coefficients_set = 1;
1022 png_app_warning(png_ptr,
1031 if (png_ptr->rgb_to_gray_red_coeff == 0 &&
1032 png_ptr->rgb_to_gray_green_coeff == 0)
1034 png_ptr->rgb_to_gray_red_coeff = 6968;
1035 png_ptr->rgb_to_gray_green_coeff = 23434;
1036 /* png_ptr->rgb_to_gray_blue_coeff = 2366; */
1048 png_set_rgb_to_gray(png_structrp png_ptr, int error_action, double red,
1051 png_set_rgb_to_gray_fixed(png_ptr, error_action,
1052 png_fixed(png_ptr, red, "rgb to gray red coefficient"),
1053 png_fixed(png_ptr, green, "rgb to gray green coefficient"));
1062 png_set_read_user_transform_fn(png_structrp png_ptr, png_user_transform_ptr
1068 png_ptr->transformations |= PNG_USER_TRANSFORM;
1069 png_ptr->read_user_transform_fn = read_user_transform_fn;
1106 png_init_palette_transformations(png_structrp png_ptr)
1119 if (png_ptr->num_trans > 0)
1124 for (i=0; i<png_ptr->num_trans; ++i)
1126 if (png_ptr->trans_alpha[i] == 255)
1128 else if (png_ptr->trans_alpha[i] == 0)
1146 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
1147 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1150 png_ptr->transformations &= ~(PNG_COMPOSE | PNG_BACKGROUND_EXPAND);
1162 if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) != 0 &&
1163 (png_ptr->transformations & PNG_EXPAND) != 0)
1166 png_ptr->background.red =
1167 png_ptr->palette[png_ptr->background.index].red;
1168 png_ptr->background.green =
1169 png_ptr->palette[png_ptr->background.index].green;
1170 png_ptr->background.blue =
1171 png_ptr->palette[png_ptr->background.index].blue;
1174 if ((png_ptr->transformations & PNG_INVERT_ALPHA) != 0)
1176 if ((png_ptr->transformations & PNG_EXPAND_tRNS) == 0)
1181 int i, istop = png_ptr->num_trans;
1184 png_ptr->trans_alpha[i] = (png_byte)(255 -
1185 png_ptr->trans_alpha[i]);
1195 png_init_rgb_transformations(png_structrp png_ptr)
1201 int input_has_alpha = (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) != 0;
1202 int input_has_transparency = png_ptr->num_trans > 0;
1212 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
1213 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1217 png_ptr->transformations &= ~(PNG_COMPOSE | PNG_BACKGROUND_EXPAND);
1229 if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) != 0 &&
1230 (png_ptr->transformations & PNG_EXPAND) != 0 &&
1231 (png_ptr->color_type & PNG_COLOR_MASK_COLOR) == 0)
1236 int gray = png_ptr->background.gray;
1237 int trans_gray = png_ptr->trans_color.gray;
1239 switch (png_ptr->bit_depth)
1266 png_ptr->background.red = png_ptr->background.green =
1267 png_ptr->background.blue = (png_uint_16)gray;
1269 if ((png_ptr->transformations & PNG_EXPAND_tRNS) == 0)
1271 png_ptr->trans_color.red = png_ptr->trans_color.green =
1272 png_ptr->trans_color.blue = (png_uint_16)trans_gray;
1280 png_init_read_transformations(png_structrp png_ptr)
1305 if (png_ptr->colorspace.gamma != 0) /* has been set */
1307 if (png_ptr->screen_gamma != 0) /* screen set too */
1308 gamma_correction = png_gamma_threshold(png_ptr->colorspace.gamma,
1309 png_ptr->screen_gamma);
1315 png_ptr->screen_gamma = png_reciprocal(png_ptr->colorspace.gamma);
1318 else if (png_ptr->screen_gamma != 0)
1324 png_ptr->colorspace.gamma = png_reciprocal(png_ptr->screen_gamma);
1332 png_ptr->screen_gamma = png_ptr->colorspace.gamma = PNG_FP_1;
1335 png_ptr->colorspace.flags |= PNG_COLORSPACE_HAVE_GAMMA;
1346 png_ptr->transformations |= PNG_GAMMA;
1349 png_ptr->transformations &= ~PNG_GAMMA;
1383 if ((png_ptr->transformations & PNG_STRIP_ALPHA) != 0 &&
1384 (png_ptr->transformations & PNG_COMPOSE) == 0)
1391 png_ptr->transformations &= ~(PNG_BACKGROUND_EXPAND | PNG_ENCODE_ALPHA |
1393 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1402 png_ptr->num_trans = 0;
1410 if (png_gamma_significant(png_ptr->screen_gamma) == 0)
1412 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
1413 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1421 if ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0)
1422 png_colorspace_set_rgb_coefficients(png_ptr);
1442 if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) != 0)
1447 if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) == 0)
1448 png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;
1451 else if ((png_ptr->transformations & PNG_COMPOSE) != 0)
1458 if ((png_ptr->transformations & PNG_GRAY_TO_RGB) != 0)
1460 if (png_ptr->background.red == png_ptr->background.green &&
1461 png_ptr->background.red == png_ptr->background.blue)
1463 png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;
1464 png_ptr->background.gray = png_ptr->background.red;
1482 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
1483 png_init_palette_transformations(png_ptr);
1486 png_init_rgb_transformations(png_ptr);
1490 if ((png_ptr->transformations & PNG_EXPAND_16) != 0 &&
1491 (png_ptr->transformations & PNG_COMPOSE) != 0 &&
1492 (png_ptr->transformations & PNG_BACKGROUND_EXPAND) == 0 &&
1493 png_ptr->bit_depth != 16)
1506 CHOP(png_ptr->background.red);
1507 CHOP(png_ptr->background.green);
1508 CHOP(png_ptr->background.blue);
1509 CHOP(png_ptr->background.gray);
1517 if ((png_ptr->transformations & (PNG_16_TO_8|PNG_SCALE_16_TO_8)) != 0 &&
1518 (png_ptr->transformations & PNG_COMPOSE) != 0 &&
1519 (png_ptr->transformations & PNG_BACKGROUND_EXPAND) == 0 &&
1520 png_ptr->bit_depth == 16)
1528 png_ptr->background.red = (png_uint_16)(png_ptr->background.red * 257);
1529 png_ptr->background.green =
1530 (png_uint_16)(png_ptr->background.green * 257);
1531 png_ptr->background.blue = (png_uint_16)(png_ptr->background.blue * 257);
1532 png_ptr->background.gray = (png_uint_16)(png_ptr->background.gray * 257);
1547 png_ptr->background_1 = png_ptr->background;
1563 if ((png_ptr->transformations & PNG_GAMMA) != 0 ||
1564 ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0 &&
1565 (png_gamma_significant(png_ptr->colorspace.gamma) != 0 ||
1566 png_gamma_significant(png_ptr->screen_gamma) != 0)) ||
1567 ((png_ptr->transformations & PNG_COMPOSE) != 0 &&
1568 (png_gamma_significant(png_ptr->colorspace.gamma) != 0 ||
1569 png_gamma_significant(png_ptr->screen_gamma) != 0
1571 || (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_UNIQUE &&
1572 png_gamma_significant(png_ptr->background_gamma) != 0)
1574 )) || ((png_ptr->transformations & PNG_ENCODE_ALPHA) != 0 &&
1575 png_gamma_significant(png_ptr->screen_gamma) != 0))
1577 png_build_gamma_table(png_ptr, png_ptr->bit_depth);
1580 if ((png_ptr->transformations & PNG_COMPOSE) != 0)
1588 if ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0)
1589 png_warning(png_ptr,
1592 if ((png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) != 0)
1598 png_colorp palette = png_ptr->palette;
1599 int num_palette = png_ptr->num_palette;
1601 if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE)
1604 back.red = png_ptr->gamma_table[png_ptr->background.red];
1605 back.green = png_ptr->gamma_table[png_ptr->background.green];
1606 back.blue = png_ptr->gamma_table[png_ptr->background.blue];
1608 back_1.red = png_ptr->gamma_to_1[png_ptr->background.red];
1609 back_1.green = png_ptr->gamma_to_1[png_ptr->background.green];
1610 back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue];
1616 switch (png_ptr->background_gamma_type)
1619 g = (png_ptr->screen_gamma);
1624 g = png_reciprocal(png_ptr->colorspace.gamma);
1625 gs = png_reciprocal2(png_ptr->colorspace.gamma,
1626 png_ptr->screen_gamma);
1630 g = png_reciprocal(png_ptr->background_gamma);
1631 gs = png_reciprocal2(png_ptr->background_gamma,
1632 png_ptr->screen_gamma);
1642 back.red = png_gamma_8bit_correct(png_ptr->background.red,
1644 back.green = png_gamma_8bit_correct(png_ptr->background.green,
1646 back.blue = png_gamma_8bit_correct(png_ptr->background.blue,
1652 back.red = (png_byte)png_ptr->background.red;
1653 back.green = (png_byte)png_ptr->background.green;
1654 back.blue = (png_byte)png_ptr->background.blue;
1659 back_1.red = png_gamma_8bit_correct(png_ptr->background.red,
1662 png_ptr->background.green, g);
1663 back_1.blue = png_gamma_8bit_correct(png_ptr->background.blue,
1669 back_1.red = (png_byte)png_ptr->background.red;
1670 back_1.green = (png_byte)png_ptr->background.green;
1671 back_1.blue = (png_byte)png_ptr->background.blue;
1677 if (i < (int)png_ptr->num_trans &&
1678 png_ptr->trans_alpha[i] != 0xff)
1680 if (png_ptr->trans_alpha[i] == 0)
1684 else /* if (png_ptr->trans_alpha[i] != 0xff) */
1688 v = png_ptr->gamma_to_1[palette[i].red];
1689 png_composite(w, v, png_ptr->trans_alpha[i], back_1.red);
1690 palette[i].red = png_ptr->gamma_from_1[w];
1692 v = png_ptr->gamma_to_1[palette[i].green];
1693 png_composite(w, v, png_ptr->trans_alpha[i], back_1.green);
1694 palette[i].green = png_ptr->gamma_from_1[w];
1696 v = png_ptr->gamma_to_1[palette[i].blue];
1697 png_composite(w, v, png_ptr->trans_alpha[i], back_1.blue);
1698 palette[i].blue = png_ptr->gamma_from_1[w];
1703 palette[i].red = png_ptr->gamma_table[palette[i].red];
1704 palette[i].green = png_ptr->gamma_table[palette[i].green];
1705 palette[i].blue = png_ptr->gamma_table[palette[i].blue];
1715 png_ptr->transformations &= ~(PNG_COMPOSE | PNG_GAMMA);
1718 /* if (png_ptr->background_gamma_type!=PNG_BACKGROUND_GAMMA_UNKNOWN) */
1725 switch (png_ptr->background_gamma_type)
1728 g = png_ptr->screen_gamma;
1733 g = png_reciprocal(png_ptr->colorspace.gamma);
1734 gs = png_reciprocal2(png_ptr->colorspace.gamma,
1735 png_ptr->screen_gamma);
1739 g = png_reciprocal(png_ptr->background_gamma);
1740 gs = png_reciprocal2(png_ptr->background_gamma,
1741 png_ptr->screen_gamma);
1745 png_error(png_ptr, "invalid background gamma type");
1752 png_ptr->background_1.gray = png_gamma_correct(png_ptr,
1753 png_ptr->background.gray, g);
1756 png_ptr->background.gray = png_gamma_correct(png_ptr,
1757 png_ptr->background.gray, gs);
1759 if ((png_ptr->background.red != png_ptr->background.green) ||
1760 (png_ptr->background.red != png_ptr->background.blue) ||
1761 (png_ptr->background.red != png_ptr->background.gray))
1766 png_ptr->background_1.red = png_gamma_correct(png_ptr,
1767 png_ptr->background.red, g);
1769 png_ptr->background_1.green = png_gamma_correct(png_ptr,
1770 png_ptr->background.green, g);
1772 png_ptr->background_1.blue = png_gamma_correct(png_ptr,
1773 png_ptr->background.blue, g);
1778 png_ptr->background.red = png_gamma_correct(png_ptr,
1779 png_ptr->background.red, gs);
1781 png_ptr->background.green = png_gamma_correct(png_ptr,
1782 png_ptr->background.green, gs);
1784 png_ptr->background.blue = png_gamma_correct(png_ptr,
1785 png_ptr->background.blue, gs);
1792 png_ptr->background_1.red = png_ptr->background_1.green
1793 = png_ptr->background_1.blue = png_ptr->background_1.gray;
1795 png_ptr->background.red = png_ptr->background.green
1796 = png_ptr->background.blue = png_ptr->background.gray;
1800 png_ptr->background_gamma_type = PNG_BACKGROUND_GAMMA_SCREEN;
1802 }/* png_ptr->transformations & PNG_BACKGROUND */
1807 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE
1810 && ((png_ptr->transformations & PNG_EXPAND) == 0 ||
1811 (png_ptr->transformations & PNG_RGB_TO_GRAY) == 0)
1815 png_colorp palette = png_ptr->palette;
1816 int num_palette = png_ptr->num_palette;
1824 palette[i].red = png_ptr->gamma_table[palette[i].red];
1825 palette[i].green = png_ptr
1826 palette[i].blue = png_ptr->gamma_table[palette[i].blue];
1830 png_ptr->transformations &= ~PNG_GAMMA;
1840 if ((png_ptr->transformations & PNG_COMPOSE) != 0 &&
1841 (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE))
1844 int istop = (int)png_ptr->num_trans;
1846 png_colorp palette = png_ptr->palette;
1848 back.red = (png_byte)png_ptr->background.red;
1849 back.green = (png_byte)png_ptr->background.green;
1850 back.blue = (png_byte)png_ptr->background.blue;
1854 if (png_ptr->trans_alpha[i] == 0)
1859 else if (png_ptr->trans_alpha[i] != 0xff)
1863 png_ptr->trans_alpha[i], back.red);
1866 png_ptr->trans_alpha[i], back.green);
1869 png_ptr->trans_alpha[i], back.blue);
1873 png_ptr->transformations &= ~PNG_COMPOSE;
1878 if ((png_ptr->transformations & PNG_SHIFT) != 0 &&
1879 (png_ptr->transformations & PNG_EXPAND) == 0 &&
1880 (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE))
1883 int istop = png_ptr->num_palette;
1884 int shift = 8 - png_ptr->sig_bit.red;
1886 png_ptr->transformations &= ~PNG_SHIFT;
1895 int component = png_ptr->palette[i].red;
1898 png_ptr->palette[i].red = (png_byte)component;
1901 shift = 8 - png_ptr->sig_bit.green;
1905 int component = png_ptr->palette[i].green;
1908 png_ptr->palette[i].green = (png_byte)component;
1911 shift = 8 - png_ptr->sig_bit.blue;
1915 int component = png_ptr->palette[i].blue;
1918 png_ptr->palette[i].blue = (png_byte)component;
1929 png_read_transform_info(png_structrp png_ptr, png_inforp info_ptr)
1934 if ((png_ptr->transformations & PNG_EXPAND) != 0)
1942 if (png_ptr->num_trans > 0)
1951 if (png_ptr->palette == NULL)
1952 png_error (png_ptr, "Palette is NULL in indexed image");
1956 if (png_ptr->num_trans != 0)
1958 if ((png_ptr->transformations & PNG_EXPAND_tRNS) != 0)
1974 if ((png_ptr->transformations & PNG_COMPOSE) != 0)
1975 info_ptr->background = png_ptr->background;
1988 info_ptr->colorspace.gamma = png_ptr->colorspace.gamma;
1995 if ((png_ptr->transformations & PNG_SCALE_16_TO_8) != 0)
2000 if ((png_ptr->transformations & PNG_16_TO_8) != 0)
2014 png_ptr->transformations |= PNG_16_TO_8;
2019 png_ptr->transformations |= PNG_SCALE_16_TO_8;
2030 if ((png_ptr->transformations & PNG_GRAY_TO_RGB) != 0)
2036 if ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0)
2042 if ((png_ptr->transformations & PNG_QUANTIZE) != 0)
2046 png_ptr->palette_lookup != 0 && info_ptr->bit_depth == 8)
2054 if ((png_ptr->transformations & PNG_EXPAND_16) != 0 &&
2063 if ((png_ptr->transformations & PNG_PACK) != 0 &&
2078 if ((png_ptr->transformations & PNG_STRIP_ALPHA) != 0)
2091 if ((png_ptr->transformations & PNG_FILLER) != 0 &&
2097 if ((png_ptr->transformations & PNG_ADD_ALPHA) != 0)
2104 if ((png_ptr->transformations & PNG_USER_TRANSFORM) != 0)
2106 if (png_ptr->user_transform_depth != 0)
2107 info_ptr->bit_depth = png_ptr->user_transform_depth;
2109 if (png_ptr->user_transform_channels != 0)
2110 info_ptr->channels = png_ptr->user_transform_channels;
2125 png_ptr->info_rowbytes = info_ptr->rowbytes;
2128 if (png_ptr != NULL)
2989 png_do_rgb_to_gray(png_structrp png_ptr, png_row_infop row_info, png_bytep row)
2999 PNG_CONST png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff;
3000 PNG_CONST png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff;
3014 if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL)
3028 red = png_ptr->gamma_to_1[red];
3029 green = png_ptr->gamma_to_1[green];
3030 blue = png_ptr->gamma_to_1[blue];
3033 *(dp++) = png_ptr->gamma_from_1[
3042 if (png_ptr->gamma_table != NULL)
3043 red = png_ptr->gamma_table[red];
3086 if (png_ptr->gamma_16_to_1 != NULL && png_ptr->gamma_16_from_1 != NULL)
3103 if (png_ptr->gamma_16_table != NULL)
3104 w = png_ptr->gamma_16_table[(red & 0xff)
3105 >> png_ptr->gamma_shift][red >> 8];
3113 png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red & 0xff)
3114 >> png_ptr->gamma_shift][red>>8];
3116 png_ptr->gamma_16_to_1[(green & 0xff) >>
3117 png_ptr->gamma_shift][green>>8];
3118 png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue & 0xff)
3119 >> png_ptr->gamma_shift][blue>>8];
3122 w = png_ptr->gamma_16_from_1[(gray16 & 0xff) >>
3123 png_ptr->gamma_shift][gray16 >> 8];
3192 png_do_compose(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
3195 png_const_bytep gamma_table = png_ptr->gamma_table;
3196 png_const_bytep gamma_from_1 = png_ptr->gamma_from_1;
3197 png_const_bytep gamma_to_1 = png_ptr->gamma_to_1;
3198 png_const_uint_16pp gamma_16 = png_ptr->gamma_16_table;
3199 png_const_uint_16pp gamma_16_from_1 = png_ptr->gamma_16_from_1;
3200 png_const_uint_16pp gamma_16_to_1 = png_ptr->gamma_16_to_1;
3201 int gamma_shift = png_ptr->gamma_shift;
3202 int optimize = (png_ptr->flags & PNG_FLAG_OPTIMIZE_ALPHA) != 0;
3226 == png_ptr->trans_color.gray)
3230 (unsigned int)(png_ptr->background.gray << shift);
3256 == png_ptr->trans_color.gray)
3260 (unsigned int)png_ptr->background.gray << shift;
3293 == png_ptr->trans_color.gray)
3297 (unsigned int)png_ptr->background.gray << shift;
3324 == png_ptr->trans_color.gray)
3328 (unsigned int)(png_ptr->background.gray << shift);
3361 == png_ptr->trans_color.gray)
3365 (unsigned int)(png_ptr->background.gray << shift);
3390 if (*sp == png_ptr->trans_color.gray)
3391 *sp = (png_byte)png_ptr->background.gray;
3403 if (*sp == png_ptr->trans_color.gray)
3404 *sp = (png_byte)png_ptr->background.gray;
3422 if (v == png_ptr->trans_color.gray)
3425 *sp = (png_byte)((png_ptr->background.gray >> 8)
3427 *(sp + 1) = (png_byte)(png_ptr->background.gray
3449 if (v == png_ptr->trans_color.gray)
3451 *sp = (png_byte)((png_ptr->background.gray >> 8)
3453 *(sp + 1) = (png_byte)(png_ptr->background.gray
3477 if (*sp == png_ptr->trans_color.red &&
3478 *(sp + 1) == png_ptr->trans_color.green &&
3479 *(sp + 2) == png_ptr->trans_color.blue)
3481 *sp = (png_byte)png_ptr->background.red;
3482 *(sp + 1) = (png_byte)png_ptr->background.green;
3483 *(sp + 2) = (png_byte)png_ptr->background.blue;
3500 if (*sp == png_ptr->trans_color.red &&
3501 *(sp + 1) == png_ptr->trans_color.green &&
3502 *(sp + 2) == png_ptr->trans_color.blue)
3504 *sp = (png_byte)png_ptr->background.red;
3505 *(sp + 1) = (png_byte)png_ptr->background.green;
3506 *(sp + 2) = (png_byte)png_ptr->background.blue;
3527 if (r == png_ptr->trans_color.red &&
3528 g == png_ptr->trans_color.green &&
3529 b == png_ptr->trans_color.blue)
3532 *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
3533 *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
3534 *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
3536 *(sp + 3) = (png_byte)(png_ptr->background.green
3538 *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
3540 *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
3574 if (r == png_ptr->trans_color.red &&
3575 g == png_ptr->trans_color.green &&
3576 b == png_ptr->trans_color.blue)
3578 *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
3579 *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
3580 *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
3582 *(sp + 3) = (png_byte)(png_ptr->background.green
3584 *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
3586 *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
3613 *sp = (png_byte)png_ptr->background.gray;
3621 png_composite(w, v, a, png_ptr->background_1.gray);
3637 *sp = (png_byte)png_ptr->background.gray;
3640 png_composite(*sp, *sp, a, png_ptr->background.gray);
3644 else /* if (png_ptr->bit_depth == 16) */
3668 *sp = (png_byte)((png_ptr->background.gray >> 8)
3670 *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);
3678 png_composite_16(v, g, a, png_ptr->background_1.gray);
3700 *sp = (png_byte)((png_ptr->background.gray >> 8)
3702 *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);
3710 png_composite_16(v, g, a, png_ptr->background.gray);
3743 *sp = (png_byte)png_ptr->background.red;
3744 *(sp + 1) = (png_byte)png_ptr->background.green;
3745 *(sp + 2) = (png_byte)png_ptr->background.blue;
3753 png_composite(w, v, a, png_ptr->background_1.red);
3758 png_composite(w, v, a, png_ptr->background_1.green);
3763 png_composite(w, v, a, png_ptr->background_1.blue);
3779 *sp = (png_byte)png_ptr->background.red;
3780 *(sp + 1) = (png_byte)png_ptr->background.green;
3781 *(sp + 2) = (png_byte)png_ptr->background.blue;
3786 png_composite(*sp, *sp, a, png_ptr->background.red);
3789 png_ptr->background.green);
3792 png_ptr->background.blue);
3829 *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
3830 *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
3831 *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
3833 *(sp + 3) = (png_byte)(png_ptr->background.green
3835 *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
3837 *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
3845 png_composite_16(w, v, a, png_ptr->background_1.red);
3853 png_composite_16(w, v, a, png_ptr->background_1.green);
3862 png_composite_16(w, v, a, png_ptr->background_1.blue);
3884 *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
3885 *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
3886 *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
3888 *(sp + 3) = (png_byte)(png_ptr->background.green
3890 *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
3892 *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
3905 png_composite_16(v, r, a, png_ptr->background.red);
3909 png_composite_16(v, g, a, png_ptr->background.green);
3913 png_composite_16(v, b, a, png_ptr->background.blue);
3938 png_do_gamma(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
3940 png_const_bytep gamma_table = png_ptr->gamma_table;
3941 png_const_uint_16pp gamma_16_table = png_ptr->gamma_16_table;
3942 int gamma_shift = png_ptr->gamma_shift;
4139 png_do_encode_alpha(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
4149 PNG_CONST png_bytep table = png_ptr->gamma_from_1;
4168 PNG_CONST png_uint_16pp table = png_ptr->gamma_16_from_1;
4169 PNG_CONST int gamma_shift = png_ptr->gamma_shift;
4196 png_warning(png_ptr, "png_do_encode_alpha: unexpected call");
4717 png_do_read_transformations(png_structrp png_ptr, png_row_infop row_info)
4721 if (png_ptr->row_buf == NULL)
4727 png_error(png_ptr, "NULL row buffer");
4736 if ((png_ptr->flags & PNG_FLAG_DETECT_UNINITIALIZED) != 0 &&
4737 (png_ptr->flags & PNG_FLAG_ROW_INIT) == 0)
4743 png_error(png_ptr, "Uninitialized row");
4747 if ((png_ptr->transformations & PNG_EXPAND) != 0)
4751 png_do_expand_palette(row_info, png_ptr->row_buf + 1,
4752 png_ptr->palette, png_ptr->trans_alpha, png_ptr->num_trans);
4757 if (png_ptr->num_trans != 0 &&
4758 (png_ptr->transformations & PNG_EXPAND_tRNS) != 0)
4759 png_do_expand(row_info, png_ptr->row_buf + 1,
4760 &(png_ptr->trans_color));
4763 png_do_expand(row_info, png_ptr->row_buf + 1,
4770 if ((png_ptr->transformations & PNG_STRIP_ALPHA) != 0 &&
4771 (png_ptr->transformations & PNG_COMPOSE) == 0 &&
4774 png_do_strip_channel(row_info, png_ptr->row_buf + 1,
4779 if ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0)
4782 png_do_rgb_to_gray(png_ptr, row_info,
4783 png_ptr->row_buf + 1);
4787 png_ptr->rgb_to_gray_status=1;
4788 if ((png_ptr->transformations & PNG_RGB_TO_GRAY) ==
4790 png_warning(png_ptr, "png_do_rgb_to_gray found nongray pixel");
4792 if ((png_ptr->transformations & PNG_RGB_TO_GRAY) ==
4794 png_error(png_ptr, "png_do_rgb_to_gray found nongray pixel");
4834 if ((png_ptr->transformations & PNG_GRAY_TO_RGB) != 0 &&
4835 (png_ptr->mode & PNG_BACKGROUND_IS_GRAY) == 0)
4836 png_do_gray_to_rgb(row_info, png_ptr->row_buf + 1);
4841 if ((png_ptr->transformations & PNG_COMPOSE) != 0)
4842 png_do_compose(row_info, png_ptr->row_buf + 1, png_ptr);
4846 if ((png_ptr->transformations & PNG_GAMMA) != 0 &&
4849 (png_ptr->transformations & PNG_RGB_TO_GRAY) == 0 &&
4856 !((png_ptr->transformations & PNG_COMPOSE) != 0 &&
4857 ((png_ptr->num_trans != 0) ||
4858 (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) != 0)) &&
4863 (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE))
4864 png_do_gamma(row_info, png_ptr->row_buf + 1, png_ptr);
4868 if ((png_ptr->transformations & PNG_STRIP_ALPHA) != 0 &&
4869 (png_ptr->transformations & PNG_COMPOSE) != 0 &&
4872 png_do_strip_channel(row_info, png_ptr->row_buf + 1,
4877 if ((png_ptr->transformations & PNG_ENCODE_ALPHA) != 0 &&
4879 png_do_encode_alpha(row_info, png_ptr->row_buf + 1, png_ptr);
4883 if ((png_ptr->transformations & PNG_SCALE_16_TO_8) != 0)
4884 png_do_scale_16_to_8(row_info, png_ptr->row_buf + 1);
4892 if ((png_ptr->transformations & PNG_16_TO_8) != 0)
4893 png_do_chop(row_info, png_ptr->row_buf + 1);
4897 if ((png_ptr->transformations & PNG_QUANTIZE) != 0)
4899 png_do_quantize(row_info, png_ptr->row_buf + 1,
4900 png_ptr->palette_lookup, png_ptr->quantize_index);
4903 png_error(png_ptr, "png_do_quantize returned rowbytes=0");
4913 if ((png_ptr->transformations & PNG_EXPAND_16) != 0)
4914 png_do_expand_16(row_info, png_ptr->row_buf + 1);
4919 if ((png_ptr->transformations & PNG_GRAY_TO_RGB) != 0 &&
4920 (png_ptr->mode & PNG_BACKGROUND_IS_GRAY) != 0)
4921 png_do_gray_to_rgb(row_info, png_ptr->row_buf + 1);
4925 if ((png_ptr->transformations & PNG_INVERT_MONO) != 0)
4926 png_do_invert(row_info, png_ptr->row_buf + 1);
4930 if ((png_ptr->transformations & PNG_INVERT_ALPHA) != 0)
4931 png_do_read_invert_alpha(row_info, png_ptr->row_buf + 1);
4935 if ((png_ptr->transformations & PNG_SHIFT) != 0)
4936 png_do_unshift(row_info, png_ptr->row_buf + 1,
4937 &(png_ptr->shift));
4941 if ((png_ptr->transformations & PNG_PACK) != 0)
4942 png_do_unpack(row_info, png_ptr->row_buf + 1);
4948 png_ptr->num_palette_max >= 0)
4949 png_do_check_palette_indexes(png_ptr, row_info);
4953 if ((png_ptr->transformations & PNG_BGR) != 0)
4954 png_do_bgr(row_info, png_ptr->row_buf + 1);
4958 if ((png_ptr->transformations & PNG_PACKSWAP) != 0)
4959 png_do_packswap(row_info, png_ptr->row_buf + 1);
4963 if ((png_ptr->transformations & PNG_FILLER) != 0)
4964 png_do_read_filler(row_info, png_ptr->row_buf + 1,
4965 (png_uint_32)png_ptr->filler, png_ptr->flags);
4969 if ((png_ptr->transformations & PNG_SWAP_ALPHA) != 0)
4970 png_do_read_swap_alpha(row_info, png_ptr->row_buf + 1);
4975 if ((png_ptr->transformations & PNG_SWAP_BYTES) != 0)
4976 png_do_swap(row_info, png_ptr->row_buf + 1);
4981 if ((png_ptr->transformations & PNG_USER_TRANSFORM) != 0)
4983 if (png_ptr->read_user_transform_fn != NULL)
4984 (*(png_ptr->read_user_transform_fn)) /* User read transform function */
4985 (png_ptr, /* png_ptr */
4993 png_ptr->row_buf + 1); /* start of pixel data for row */
4995 if (png_ptr->user_transform_depth != 0)
4996 row_info->bit_depth = png_ptr->user_transform_depth;
4998 if (png_ptr->user_transform_channels != 0)
4999 row_info->channels = png_ptr->user_transform_channels;