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,
56 png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
67 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
68 png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE;
72 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
73 png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE |
78 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
79 png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_NOWARN;
86 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
98 png_rtran_ok(png_structrp png_ptr, int need_IHDR)
100 if (png_ptr != NULL)
102 if ((png_ptr->flags & PNG_FLAG_ROW_INIT) != 0)
103 png_app_error(png_ptr,
106 else if (need_IHDR && (png_ptr->mode & PNG_HAVE_IHDR) == 0)
107 png_app_error(png_ptr, "invalid before the PNG header has been read");
112 png_ptr->flags |= PNG_FLAG_DETECT_UNINITIALIZED;
125 png_set_background_fixed(png_structrp png_ptr,
131 if (png_rtran_ok(png_ptr, 0) == 0 || background_color == NULL)
136 png_warning(png_ptr, "Application must supply a known background gamma");
140 png_ptr->transformations |= PNG_COMPOSE | PNG_STRIP_ALPHA;
141 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
142 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
144 png_ptr->background = *background_color;
145 png_ptr->background_gamma = background_gamma;
146 png_ptr->background_gamma_type = (png_byte)(background_gamma_code);
148 png_ptr->transformations |= PNG_BACKGROUND_EXPAND;
150 png_ptr->transformations &= ~PNG_BACKGROUND_EXPAND;
155 png_set_background(png_structrp png_ptr,
159 png_set_background_fixed(png_ptr, background_color, background_gamma_code,
160 need_expand, png_fixed(png_ptr, background_gamma, "png_set_background"));
171 png_set_scale_16(png_structrp png_ptr)
175 if (png_rtran_ok(png_ptr, 0) == 0)
178 png_ptr->transformations |= PNG_SCALE_16_TO_8;
185 png_set_strip_16(png_structrp png_ptr)
189 if (png_rtran_ok(png_ptr, 0) == 0)
192 png_ptr->transformations |= PNG_16_TO_8;
198 png_set_strip_alpha(png_structrp png_ptr)
202 if (png_rtran_ok(png_ptr, 0) == 0)
205 png_ptr->transformations |= PNG_STRIP_ALPHA;
211 translate_gamma_flags(png_structrp png_ptr, png_fixed_point output_gamma,
226 png_ptr->flags |= PNG_FLAG_ASSUME_sRGB;
228 PNG_UNUSED(png_ptr)
250 convert_gamma_value(png_structrp png_ptr, double output_gamma)
266 png_fixed_error(png_ptr, "gamma value");
275 png_set_alpha_mode_fixed(png_structrp png_ptr, int mode,
283 if (png_rtran_ok(png_ptr, 0) == 0)
286 output_gamma = translate_gamma_flags(png_ptr, output_gamma, 1/*screen*/);
298 png_error(png_ptr, "output gamma out of expected range");
325 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
326 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
331 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
332 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
339 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
340 png_ptr->flags |= PNG_FLAG_OPTIMIZE_ALPHA;
346 png_ptr->transformations |= PNG_ENCODE_ALPHA;
347 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
351 png_error(png_ptr, "invalid alpha mode");
358 if (png_ptr->colorspace.gamma == 0)
360 png_ptr->colorspace.gamma = file_gamma;
361 png_ptr->colorspace.flags |= PNG_COLORSPACE_HAVE_GAMMA;
365 png_ptr->screen_gamma = output_gamma;
373 memset(&png_ptr->background, 0, (sizeof png_ptr->background));
374 png_ptr->background_gamma = png_ptr->colorspace.gamma; /* just in case */
375 png_ptr->background_gamma_type = PNG_BACKGROUND_GAMMA_FILE;
376 png_ptr->transformations &= ~PNG_BACKGROUND_EXPAND;
378 if ((png_ptr->transformations & PNG_COMPOSE) != 0)
379 png_error(png_ptr,
382 png_ptr->transformations |= PNG_COMPOSE;
388 png_set_alpha_mode(png_structrp png_ptr, int mode, double output_gamma)
390 png_set_alpha_mode_fixed(png_ptr, mode, convert_gamma_value(png_ptr,
416 png_set_quantize(png_structrp png_ptr, png_colorp palette,
422 if (png_rtran_ok(png_ptr, 0) == 0)
425 png_ptr->transformations |= PNG_QUANTIZE;
431 png_ptr->quantize_index = (png_bytep)png_malloc(png_ptr,
434 png_ptr->quantize_index[i] = (png_byte)i;
448 png_ptr->quantize_sort = (png_bytep)png_malloc(png_ptr,
453 png_ptr->quantize_sort[i] = (png_byte)i;
470 if (histogram[png_ptr->quantize_sort[j]]
471 < histogram[png_ptr->quantize_sort[j + 1]])
475 t = png_ptr->quantize_sort[j];
476 png_ptr->quantize_sort[j] = png_ptr->quantize_sort[j + 1];
477 png_ptr->quantize_sort[j + 1] = t;
496 if ((int)png_ptr->quantize_sort[i] >= maximum_colors)
500 while ((int)png_ptr->quantize_sort[j] >= maximum_colors);
516 if ((int)png_ptr->quantize_sort[i] >= maximum_colors)
522 while ((int)png_ptr->quantize_sort[j] >= maximum_colors);
528 png_ptr->quantize_index[j] = (png_byte)i;
529 png_ptr->quantize_index[i] = (png_byte)j;
536 if ((int)png_ptr->quantize_index[i] >= maximum_colors)
541 d_index = png_ptr->quantize_index[i];
556 png_ptr->quantize_index[i] = (png_byte)min_k;
560 png_free(png_ptr, png_ptr->quantize_sort);
561 png_ptr->quantize_sort = NULL;
582 png_ptr->index_to_palette = (png_bytep)png_malloc(png_ptr,
584 png_ptr->palette_to_index = (png_bytep)png_malloc(png_ptr,
590 png_ptr->index_to_palette[i] = (png_byte)i;
591 png_ptr->palette_to_index[i] = (png_byte)i;
594 hash = (png_dsortpp)png_calloc(png_ptr, (png_uint_32)(769 *
624 t = (png_dsortp)png_malloc_warn(png_ptr,
649 if ((int)png_ptr->index_to_palette[p->left]
651 (int)png_ptr->index_to_palette[p->right]
668 palette[png_ptr->index_to_palette[j]]
676 if (png_ptr->quantize_index[k] ==
677 png_ptr->index_to_palette[j])
678 png_ptr->quantize_index[k] =
679 png_ptr->index_to_palette[next_j];
681 if ((int)png_ptr->quantize_index[k] ==
683 png_ptr->quantize_index[k] =
684 png_ptr->index_to_palette[j];
688 png_ptr->index_to_palette[png_ptr->palette_to_index
689 [num_new_palette]] = png_ptr->index_to_palette[j];
691 png_ptr->palette_to_index[png_ptr->index_to_palette[j]]
692 = png_ptr->palette_to_index[num_new_palette];
694 png_ptr->index_to_palette[j] =
697 png_ptr->palette_to_index[num_new_palette] =
716 png_free(png_ptr, p);
724 png_free(png_ptr, hash);
725 png_free(png_ptr, png_ptr->palette_to_index);
726 png_free(png_ptr, png_ptr->index_to_palette);
727 png_ptr->palette_to_index = NULL;
728 png_ptr->index_to_palette = NULL;
732 if (png_ptr->palette == NULL)
734 png_ptr->palette = palette;
736 png_ptr->num_palette = (png_uint_16)num_palette;
749 png_ptr->palette_lookup = (png_bytep)png_calloc(png_ptr,
752 distance = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_entries *
790 png_ptr->palette_lookup[d_index] = (png_byte)i;
797 png_free(png_ptr, distance);
804 png_set_gamma_fixed(png_structrp png_ptr, png_fixed_point scrn_gamma,
809 if (png_rtran_ok(png_ptr, 0) == 0)
813 scrn_gamma = translate_gamma_flags(png_ptr, scrn_gamma, 1/*screen*/);
814 file_gamma = translate_gamma_flags(png_ptr, file_gamma, 0/*file*/);
828 png_error(png_ptr, "invalid file gamma in png_set_gamma");
831 png_error(png_ptr, "invalid screen gamma in png_set_gamma");
837 png_ptr->colorspace.gamma = file_gamma;
838 png_ptr->colorspace.flags |= PNG_COLORSPACE_HAVE_GAMMA;
839 png_ptr->screen_gamma = scrn_gamma;
844 png_set_gamma(png_structrp png_ptr, double scrn_gamma, double file_gamma)
846 png_set_gamma_fixed(png_ptr, convert_gamma_value(png_ptr, scrn_gamma),
847 convert_gamma_value(png_ptr, file_gamma));
858 png_set_expand(png_structrp png_ptr)
862 if (png_rtran_ok(png_ptr, 0) == 0)
865 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
888 png_set_palette_to_rgb(png_structrp png_ptr)
892 if (png_rtran_ok(png_ptr, 0) == 0)
895 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
900 png_set_expand_gray_1_2_4_to_8(png_structrp png_ptr)
904 if (png_rtran_ok(png_ptr, 0) == 0)
907 png_ptr->transformations |= PNG_EXPAND;
912 png_set_tRNS_to_alpha(png_structrp png_ptr)
916 if (png_rtran_ok(png_ptr, 0) == 0)
919 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
928 png_set_expand_16(png_structrp png_ptr)
932 if (png_rtran_ok(png_ptr, 0) == 0)
935 png_ptr->transformations |= (PNG_EXPAND_16 | PNG_EXPAND | PNG_EXPAND_tRNS);
941 png_set_gray_to_rgb(png_structrp png_ptr)
945 if (png_rtran_ok(png_ptr, 0) == 0)
949 png_set_expand_gray_1_2_4_to_8(png_ptr);
950 png_ptr->transformations |= PNG_GRAY_TO_RGB;
956 png_set_rgb_to_gray_fixed(png_structrp png_ptr, int error_action,
963 if (png_rtran_ok(png_ptr, 1) == 0)
969 png_ptr->transformations |= PNG_RGB_TO_GRAY;
973 png_ptr->transformations |= PNG_RGB_TO_GRAY_WARN;
977 png_ptr->transformations |= PNG_RGB_TO_GRAY_ERR;
981 png_error(png_ptr, "invalid error action to rgb_to_gray");
984 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
986 png_ptr->transformations |= PNG_EXPAND;
992 png_error(png_ptr,
995 /* png_ptr
1011 png_ptr->rgb_to_gray_red_coeff = red_int;
1012 png_ptr->rgb_to_gray_green_coeff = green_int;
1013 png_ptr->rgb_to_gray_coefficients_set = 1;
1019 png_app_warning(png_ptr,
1028 if (png_ptr->rgb_to_gray_red_coeff == 0 &&
1029 png_ptr->rgb_to_gray_green_coeff == 0)
1031 png_ptr->rgb_to_gray_red_coeff = 6968;
1032 png_ptr->rgb_to_gray_green_coeff = 23434;
1033 /* png_ptr->rgb_to_gray_blue_coeff = 2366; */
1045 png_set_rgb_to_gray(png_structrp png_ptr, int error_action, double red,
1048 png_set_rgb_to_gray_fixed(png_ptr, error_action,
1049 png_fixed(png_ptr, red, "rgb to gray red coefficient"),
1050 png_fixed(png_ptr, green, "rgb to gray green coefficient"));
1059 png_set_read_user_transform_fn(png_structrp png_ptr, png_user_transform_ptr
1065 png_ptr->transformations |= PNG_USER_TRANSFORM;
1066 png_ptr->read_user_transform_fn = read_user_transform_fn;
1103 png_init_palette_transformations(png_structrp png_ptr)
1116 if (png_ptr->num_trans > 0)
1121 for (i=0; i<png_ptr->num_trans; ++i)
1123 if (png_ptr->trans_alpha[i] == 255)
1125 else if (png_ptr->trans_alpha[i] == 0)
1143 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
1144 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1147 png_ptr->transformations &= ~(PNG_COMPOSE | PNG_BACKGROUND_EXPAND);
1159 if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) != 0 &&
1160 (png_ptr->transformations & PNG_EXPAND) != 0)
1163 png_ptr->background.red =
1164 png_ptr->palette[png_ptr->background.index].red;
1165 png_ptr->background.green =
1166 png_ptr->palette[png_ptr->background.index].green;
1167 png_ptr->background.blue =
1168 png_ptr->palette[png_ptr->background.index].blue;
1171 if ((png_ptr->transformations & PNG_INVERT_ALPHA) != 0)
1173 if ((png_ptr->transformations & PNG_EXPAND_tRNS) == 0)
1178 int i, istop = png_ptr->num_trans;
1181 png_ptr->trans_alpha[i] = (png_byte)(255 -
1182 png_ptr->trans_alpha[i]);
1192 png_init_rgb_transformations(png_structrp png_ptr)
1198 int input_has_alpha = (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) != 0;
1199 int input_has_transparency = png_ptr->num_trans > 0;
1209 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
1210 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1214 png_ptr->transformations &= ~(PNG_COMPOSE | PNG_BACKGROUND_EXPAND);
1226 if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) != 0 &&
1227 (png_ptr->transformations & PNG_EXPAND) != 0 &&
1228 (png_ptr->color_type & PNG_COLOR_MASK_COLOR) == 0)
1233 int gray = png_ptr->background.gray;
1234 int trans_gray = png_ptr->trans_color.gray;
1236 switch (png_ptr->bit_depth)
1263 png_ptr->background.red = png_ptr->background.green =
1264 png_ptr->background.blue = (png_uint_16)gray;
1266 if ((png_ptr->transformations & PNG_EXPAND_tRNS) == 0)
1268 png_ptr->trans_color.red = png_ptr->trans_color.green =
1269 png_ptr->trans_color.blue = (png_uint_16)trans_gray;
1277 png_init_read_transformations(png_structrp png_ptr)
1302 if (png_ptr->colorspace.gamma != 0) /* has been set */
1304 if (png_ptr->screen_gamma != 0) /* screen set too */
1305 gamma_correction = png_gamma_threshold(png_ptr->colorspace.gamma,
1306 png_ptr->screen_gamma);
1312 png_ptr->screen_gamma = png_reciprocal(png_ptr->colorspace.gamma);
1315 else if (png_ptr->screen_gamma != 0)
1321 png_ptr->colorspace.gamma = png_reciprocal(png_ptr->screen_gamma);
1329 png_ptr->screen_gamma = png_ptr->colorspace.gamma = PNG_FP_1;
1332 png_ptr->colorspace.flags |= PNG_COLORSPACE_HAVE_GAMMA;
1343 png_ptr->transformations |= PNG_GAMMA;
1346 png_ptr->transformations &= ~PNG_GAMMA;
1380 if ((png_ptr->transformations & PNG_STRIP_ALPHA) != 0 &&
1381 (png_ptr->transformations & PNG_COMPOSE) == 0)
1388 png_ptr->transformations &= ~(PNG_BACKGROUND_EXPAND | PNG_ENCODE_ALPHA |
1390 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1399 png_ptr->num_trans = 0;
1407 if (png_gamma_significant(png_ptr->screen_gamma) == 0)
1409 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
1410 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1418 if ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0)
1419 png_colorspace_set_rgb_coefficients(png_ptr);
1439 if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) != 0)
1444 if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) == 0)
1445 png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;
1448 else if ((png_ptr->transformations & PNG_COMPOSE) != 0)
1455 if ((png_ptr->transformations & PNG_GRAY_TO_RGB) != 0)
1457 if (png_ptr->background.red == png_ptr->background.green &&
1458 png_ptr->background.red == png_ptr->background.blue)
1460 png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;
1461 png_ptr->background.gray = png_ptr->background.red;
1479 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
1480 png_init_palette_transformations(png_ptr);
1483 png_init_rgb_transformations(png_ptr);
1487 if ((png_ptr->transformations & PNG_EXPAND_16) != 0 &&
1488 (png_ptr->transformations & PNG_COMPOSE) != 0 &&
1489 (png_ptr->transformations & PNG_BACKGROUND_EXPAND) == 0 &&
1490 png_ptr->bit_depth != 16)
1503 CHOP(png_ptr->background.red);
1504 CHOP(png_ptr->background.green);
1505 CHOP(png_ptr->background.blue);
1506 CHOP(png_ptr->background.gray);
1514 if ((png_ptr->transformations & (PNG_16_TO_8|PNG_SCALE_16_TO_8)) != 0 &&
1515 (png_ptr->transformations & PNG_COMPOSE) != 0 &&
1516 (png_ptr->transformations & PNG_BACKGROUND_EXPAND) == 0 &&
1517 png_ptr->bit_depth == 16)
1525 png_ptr->background.red = (png_uint_16)(png_ptr->background.red * 257);
1526 png_ptr->background.green =
1527 (png_uint_16)(png_ptr->background.green * 257);
1528 png_ptr->background.blue = (png_uint_16)(png_ptr->background.blue * 257);
1529 png_ptr->background.gray = (png_uint_16)(png_ptr->background.gray * 257);
1544 png_ptr->background_1 = png_ptr->background;
1560 if ((png_ptr->transformations & PNG_GAMMA) != 0 ||
1561 ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0 &&
1562 (png_gamma_significant(png_ptr->colorspace.gamma) != 0 ||
1563 png_gamma_significant(png_ptr->screen_gamma) != 0)) ||
1564 ((png_ptr->transformations & PNG_COMPOSE) != 0 &&
1565 (png_gamma_significant(png_ptr->colorspace.gamma) != 0 ||
1566 png_gamma_significant(png_ptr->screen_gamma) != 0
1568 || (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_UNIQUE &&
1569 png_gamma_significant(png_ptr->background_gamma) != 0)
1571 )) || ((png_ptr->transformations & PNG_ENCODE_ALPHA) != 0 &&
1572 png_gamma_significant(png_ptr->screen_gamma) != 0))
1574 png_build_gamma_table(png_ptr, png_ptr->bit_depth);
1577 if ((png_ptr->transformations & PNG_COMPOSE) != 0)
1585 if ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0)
1586 png_warning(png_ptr,
1589 if ((png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) != 0)
1595 png_colorp palette = png_ptr->palette;
1596 int num_palette = png_ptr->num_palette;
1598 if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE)
1601 back.red = png_ptr->gamma_table[png_ptr->background.red];
1602 back.green = png_ptr->gamma_table[png_ptr->background.green];
1603 back.blue = png_ptr->gamma_table[png_ptr->background.blue];
1605 back_1.red = png_ptr->gamma_to_1[png_ptr->background.red];
1606 back_1.green = png_ptr->gamma_to_1[png_ptr->background.green];
1607 back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue];
1613 switch (png_ptr->background_gamma_type)
1616 g = (png_ptr->screen_gamma);
1621 g = png_reciprocal(png_ptr->colorspace.gamma);
1622 gs = png_reciprocal2(png_ptr->colorspace.gamma,
1623 png_ptr->screen_gamma);
1627 g = png_reciprocal(png_ptr->background_gamma);
1628 gs = png_reciprocal2(png_ptr->background_gamma,
1629 png_ptr->screen_gamma);
1639 back.red = png_gamma_8bit_correct(png_ptr->background.red,
1641 back.green = png_gamma_8bit_correct(png_ptr->background.green,
1643 back.blue = png_gamma_8bit_correct(png_ptr->background.blue,
1649 back.red = (png_byte)png_ptr->background.red;
1650 back.green = (png_byte)png_ptr->background.green;
1651 back.blue = (png_byte)png_ptr->background.blue;
1656 back_1.red = png_gamma_8bit_correct(png_ptr->background.red,
1659 png_ptr->background.green, g);
1660 back_1.blue = png_gamma_8bit_correct(png_ptr->background.blue,
1666 back_1.red = (png_byte)png_ptr->background.red;
1667 back_1.green = (png_byte)png_ptr->background.green;
1668 back_1.blue = (png_byte)png_ptr->background.blue;
1674 if (i < (int)png_ptr->num_trans &&
1675 png_ptr->trans_alpha[i] != 0xff)
1677 if (png_ptr->trans_alpha[i] == 0)
1681 else /* if (png_ptr->trans_alpha[i] != 0xff) */
1685 v = png_ptr->gamma_to_1[palette[i].red];
1686 png_composite(w, v, png_ptr->trans_alpha[i], back_1.red);
1687 palette[i].red = png_ptr->gamma_from_1[w];
1689 v = png_ptr->gamma_to_1[palette[i].green];
1690 png_composite(w, v, png_ptr->trans_alpha[i], back_1.green);
1691 palette[i].green = png_ptr->gamma_from_1[w];
1693 v = png_ptr->gamma_to_1[palette[i].blue];
1694 png_composite(w, v, png_ptr->trans_alpha[i], back_1.blue);
1695 palette[i].blue = png_ptr->gamma_from_1[w];
1700 palette[i].red = png_ptr->gamma_table[palette[i].red];
1701 palette[i].green = png_ptr->gamma_table[palette[i].green];
1702 palette[i].blue = png_ptr->gamma_table[palette[i].blue];
1712 png_ptr->transformations &= ~(PNG_COMPOSE | PNG_GAMMA);
1715 /* if (png_ptr->background_gamma_type!=PNG_BACKGROUND_GAMMA_UNKNOWN) */
1722 switch (png_ptr->background_gamma_type)
1725 g = png_ptr->screen_gamma;
1730 g = png_reciprocal(png_ptr->colorspace.gamma);
1731 gs = png_reciprocal2(png_ptr->colorspace.gamma,
1732 png_ptr->screen_gamma);
1736 g = png_reciprocal(png_ptr->background_gamma);
1737 gs = png_reciprocal2(png_ptr->background_gamma,
1738 png_ptr->screen_gamma);
1742 png_error(png_ptr, "invalid background gamma type");
1749 png_ptr->background_1.gray = png_gamma_correct(png_ptr,
1750 png_ptr->background.gray, g);
1753 png_ptr->background.gray = png_gamma_correct(png_ptr,
1754 png_ptr->background.gray, gs);
1756 if ((png_ptr->background.red != png_ptr->background.green) ||
1757 (png_ptr->background.red != png_ptr->background.blue) ||
1758 (png_ptr->background.red != png_ptr->background.gray))
1763 png_ptr->background_1.red = png_gamma_correct(png_ptr,
1764 png_ptr->background.red, g);
1766 png_ptr->background_1.green = png_gamma_correct(png_ptr,
1767 png_ptr->background.green, g);
1769 png_ptr->background_1.blue = png_gamma_correct(png_ptr,
1770 png_ptr->background.blue, g);
1775 png_ptr->background.red = png_gamma_correct(png_ptr,
1776 png_ptr->background.red, gs);
1778 png_ptr->background.green = png_gamma_correct(png_ptr,
1779 png_ptr->background.green, gs);
1781 png_ptr->background.blue = png_gamma_correct(png_ptr,
1782 png_ptr->background.blue, gs);
1789 png_ptr->background_1.red = png_ptr->background_1.green
1790 = png_ptr->background_1.blue = png_ptr->background_1.gray;
1792 png_ptr->background.red = png_ptr->background.green
1793 = png_ptr->background.blue = png_ptr->background.gray;
1797 png_ptr->background_gamma_type = PNG_BACKGROUND_GAMMA_SCREEN;
1799 }/* png_ptr->transformations & PNG_BACKGROUND */
1804 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE
1807 && ((png_ptr->transformations & PNG_EXPAND) == 0 ||
1808 (png_ptr->transformations & PNG_RGB_TO_GRAY) == 0)
1812 png_colorp palette = png_ptr->palette;
1813 int num_palette = png_ptr->num_palette;
1821 palette[i].red = png_ptr->gamma_table[palette[i].red];
1822 palette[i].green = png_ptr->gamma_table[palette[i].green];
1823 palette[i].blue = png_ptr->gamma_table[palette[i].blue];
1827 png_ptr
1837 if ((png_ptr->transformations & PNG_COMPOSE) != 0 &&
1838 (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE))
1841 int istop = (int)png_ptr->num_trans;
1843 png_colorp palette = png_ptr->palette;
1845 back.red = (png_byte)png_ptr->background.red;
1846 back.green = (png_byte)png_ptr->background.green;
1847 back.blue = (png_byte)png_ptr->background.blue;
1851 if (png_ptr->trans_alpha[i] == 0)
1856 else if (png_ptr->trans_alpha[i] != 0xff)
1860 png_ptr->trans_alpha[i], back.red);
1863 png_ptr->trans_alpha[i], back.green);
1866 png_ptr->trans_alpha[i], back.blue);
1870 png_ptr->transformations &= ~PNG_COMPOSE;
1875 if ((png_ptr->transformations & PNG_SHIFT) != 0 &&
1876 (png_ptr->transformations & PNG_EXPAND) == 0 &&
1877 (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE))
1880 int istop = png_ptr->num_palette;
1881 int shift = 8 - png_ptr->sig_bit.red;
1883 png_ptr->transformations &= ~PNG_SHIFT;
1892 int component = png_ptr->palette[i].red;
1895 png_ptr->palette[i].red = (png_byte)component;
1898 shift = 8 - png_ptr->sig_bit.green;
1902 int component = png_ptr->palette[i].green;
1905 png_ptr->palette[i].green = (png_byte)component;
1908 shift = 8 - png_ptr->sig_bit.blue;
1912 int component = png_ptr->palette[i].blue;
1915 png_ptr->palette[i].blue = (png_byte)component;
1926 png_read_transform_info(png_structrp png_ptr, png_inforp info_ptr)
1931 if ((png_ptr->transformations & PNG_EXPAND) != 0)
1939 if (png_ptr->num_trans > 0)
1948 if (png_ptr->palette == NULL)
1949 png_error (png_ptr, "Palette is NULL in indexed image");
1953 if (png_ptr->num_trans != 0)
1955 if ((png_ptr->transformations & PNG_EXPAND_tRNS) != 0)
1971 if ((png_ptr->transformations & PNG_COMPOSE) != 0)
1972 info_ptr->background = png_ptr->background;
1985 info_ptr->colorspace.gamma = png_ptr->colorspace.gamma;
1992 if ((png_ptr->transformations & PNG_SCALE_16_TO_8) != 0)
1997 if ((png_ptr->transformations & PNG_16_TO_8) != 0)
2011 png_ptr->transformations |= PNG_16_TO_8;
2016 png_ptr->transformations |= PNG_SCALE_16_TO_8;
2027 if ((png_ptr->transformations & PNG_GRAY_TO_RGB) != 0)
2033 if ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0)
2039 if ((png_ptr->transformations & PNG_QUANTIZE) != 0)
2043 png_ptr->palette_lookup != 0 && info_ptr->bit_depth == 8)
2051 if ((png_ptr->transformations & PNG_EXPAND_16) != 0 &&
2060 if ((png_ptr->transformations & PNG_PACK) != 0 &&
2075 if ((png_ptr->transformations & PNG_STRIP_ALPHA) != 0)
2088 if ((png_ptr->transformations & PNG_FILLER) != 0 &&
2094 if ((png_ptr->transformations & PNG_ADD_ALPHA) != 0)
2101 if ((png_ptr->transformations & PNG_USER_TRANSFORM) != 0)
2103 if (png_ptr->user_transform_depth != 0)
2104 info_ptr->bit_depth = png_ptr->user_transform_depth;
2106 if (png_ptr->user_transform_channels != 0)
2107 info_ptr->channels = png_ptr->user_transform_channels;
2122 png_ptr->info_rowbytes = info_ptr->rowbytes;
2125 if (png_ptr != NULL)
2986 png_do_rgb_to_gray(png_structrp png_ptr, png_row_infop row_info, png_bytep row)
2996 PNG_CONST png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff;
2997 PNG_CONST png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff;
3011 if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL)
3025 red = png_ptr->gamma_to_1[red];
3026 green = png_ptr->gamma_to_1[green];
3027 blue = png_ptr->gamma_to_1[blue];
3030 *(dp++) = png_ptr->gamma_from_1[
3039 if (png_ptr->gamma_table != NULL)
3040 red = png_ptr->gamma_table[red];
3083 if (png_ptr->gamma_16_to_1 != NULL && png_ptr->gamma_16_from_1 != NULL)
3100 if (png_ptr->gamma_16_table != NULL)
3101 w = png_ptr->gamma_16_table[(red & 0xff)
3102 >> png_ptr->gamma_shift][red >> 8];
3110 png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red & 0xff)
3111 >> png_ptr->gamma_shift][red>>8];
3113 png_ptr->gamma_16_to_1[(green & 0xff) >>
3114 png_ptr->gamma_shift][green>>8];
3115 png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue & 0xff)
3116 >> png_ptr->gamma_shift][blue>>8];
3119 w = png_ptr->gamma_16_from_1[(gray16 & 0xff) >>
3120 png_ptr->gamma_shift][gray16 >> 8];
3189 png_do_compose(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
3192 png_const_bytep gamma_table = png_ptr->gamma_table;
3193 png_const_bytep gamma_from_1 = png_ptr->gamma_from_1;
3194 png_const_bytep gamma_to_1 = png_ptr->gamma_to_1;
3195 png_const_uint_16pp gamma_16 = png_ptr->gamma_16_table;
3196 png_const_uint_16pp gamma_16_from_1 = png_ptr->gamma_16_from_1;
3197 png_const_uint_16pp gamma_16_to_1 = png_ptr->gamma_16_to_1;
3198 int gamma_shift = png_ptr->gamma_shift;
3199 int optimize = (png_ptr->flags & PNG_FLAG_OPTIMIZE_ALPHA) != 0;
3223 == png_ptr->trans_color.gray)
3226 tmp |= png_ptr->background.gray << shift;
3252 == png_ptr->trans_color.gray)
3255 tmp |= png_ptr->background.gray << shift;
3288 == png_ptr->trans_color.gray)
3291 tmp |= png_ptr->background.gray << shift;
3318 == png_ptr->trans_color.gray)
3321 tmp |= png_ptr->background.gray << shift;
3354 == png_ptr->trans_color.gray)
3357 tmp |= png_ptr->background.gray << shift;
3382 if (*sp == png_ptr->trans_color.gray)
3383 *sp = (png_byte)png_ptr->background.gray;
3395 if (*sp == png_ptr->trans_color.gray)
3396 *sp = (png_byte)png_ptr->background.gray;
3414 if (v == png_ptr->trans_color.gray)
3417 *sp = (png_byte)((png_ptr->background.gray >> 8)
3419 *(sp + 1) = (png_byte)(png_ptr->background.gray
3441 if (v == png_ptr->trans_color.gray)
3443 *sp = (png_byte)((png_ptr->background.gray >> 8)
3445 *(sp + 1) = (png_byte)(png_ptr->background.gray
3469 if (*sp == png_ptr->trans_color.red &&
3470 *(sp + 1) == png_ptr->trans_color.green &&
3471 *(sp + 2) == png_ptr->trans_color.blue)
3473 *sp = (png_byte)png_ptr->background.red;
3474 *(sp + 1) = (png_byte)png_ptr->background.green;
3475 *(sp + 2) = (png_byte)png_ptr->background.blue;
3492 if (*sp == png_ptr->trans_color.red &&
3493 *(sp + 1) == png_ptr->trans_color.green &&
3494 *(sp + 2) == png_ptr->trans_color.blue)
3496 *sp = (png_byte)png_ptr->background.red;
3497 *(sp + 1) = (png_byte)png_ptr->background.green;
3498 *(sp + 2) = (png_byte)png_ptr->background.blue;
3519 if (r == png_ptr->trans_color.red &&
3520 g == png_ptr->trans_color.green &&
3521 b == png_ptr->trans_color.blue)
3524 *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
3525 *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
3526 *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
3528 *(sp + 3) = (png_byte)(png_ptr->background.green
3530 *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
3532 *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
3566 if (r == png_ptr->trans_color.red &&
3567 g == png_ptr->trans_color.green &&
3568 b == png_ptr->trans_color.blue)
3570 *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
3571 *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
3572 *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
3574 *(sp + 3) = (png_byte)(png_ptr->background.green
3576 *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
3578 *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
3605 *sp = (png_byte)png_ptr->background.gray;
3613 png_composite(w, v, a, png_ptr->background_1.gray);
3629 *sp = (png_byte)png_ptr->background.gray;
3632 png_composite(*sp, *sp, a, png_ptr->background.gray);
3636 else /* if (png_ptr->bit_depth == 16) */
3660 *sp = (png_byte)((png_ptr->background.gray >> 8)
3662 *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);
3670 png_composite_16(v, g, a, png_ptr->background_1.gray);
3692 *sp = (png_byte)((png_ptr->background.gray >> 8)
3694 *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);
3702 png_composite_16(v, g, a, png_ptr->background.gray);
3735 *sp = (png_byte)png_ptr->background.red;
3736 *(sp + 1) = (png_byte)png_ptr->background.green;
3737 *(sp + 2) = (png_byte)png_ptr->background.blue;
3745 png_composite(w, v, a, png_ptr->background_1.red);
3750 png_composite(w, v, a, png_ptr->background_1.green);
3755 png_composite(w, v, a, png_ptr->background_1.blue);
3771 *sp = (png_byte)png_ptr->background.red;
3772 *(sp + 1) = (png_byte)png_ptr->background.green;
3773 *(sp + 2) = (png_byte)png_ptr->background.blue;
3778 png_composite(*sp, *sp, a, png_ptr->background.red);
3781 png_ptr->background.green);
3784 png_ptr->background.blue);
3821 *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
3822 *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
3823 *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
3825 *(sp + 3) = (png_byte)(png_ptr->background.green
3827 *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
3829 *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
3837 png_composite_16(w, v, a, png_ptr->background_1.red);
3845 png_composite_16(w, v, a, png_ptr->background_1.green);
3854 png_ptr->background_1.blue);
3876 *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
3877 *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
3878 *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
3880 *(sp + 3) = (png_byte)(png_ptr->background.green
3882 *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
3884 *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
3897 png_composite_16(v, r, a, png_ptr->background.red);
3901 png_composite_16(v, g, a, png_ptr->background.green);
3905 png_composite_16(v, b, a, png_ptr->background.blue);
3930 png_do_gamma(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
3932 png_const_bytep gamma_table = png_ptr->gamma_table;
3933 png_const_uint_16pp gamma_16_table = png_ptr->gamma_16_table;
3934 int gamma_shift = png_ptr->gamma_shift;
4131 png_do_encode_alpha(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
4141 PNG_CONST png_bytep table = png_ptr->gamma_from_1;
4160 PNG_CONST png_uint_16pp table = png_ptr->gamma_16_from_1;
4161 PNG_CONST int gamma_shift = png_ptr->gamma_shift;
4188 png_warning(png_ptr, "png_do_encode_alpha: unexpected call");
4707 png_do_read_transformations(png_structrp png_ptr, png_row_infop row_info)
4711 if (png_ptr->row_buf == NULL)
4717 png_error(png_ptr, "NULL row buffer");
4726 if ((png_ptr->flags & PNG_FLAG_DETECT_UNINITIALIZED) != 0 &&
4727 (png_ptr->flags & PNG_FLAG_ROW_INIT) == 0)
4733 png_error(png_ptr, "Uninitialized row");
4737 if ((png_ptr->transformations & PNG_EXPAND) != 0)
4741 png_do_expand_palette(row_info, png_ptr->row_buf + 1,
4742 png_ptr->palette, png_ptr->trans_alpha, png_ptr->num_trans);
4747 if (png_ptr->num_trans != 0 &&
4748 (png_ptr->transformations & PNG_EXPAND_tRNS) != 0)
4749 png_do_expand(row_info, png_ptr->row_buf + 1,
4750 &(png_ptr->trans_color));
4753 png_do_expand(row_info, png_ptr->row_buf + 1,
4760 if ((png_ptr->transformations & PNG_STRIP_ALPHA) != 0 &&
4761 (png_ptr->transformations & PNG_COMPOSE) == 0 &&
4764 png_do_strip_channel(row_info, png_ptr->row_buf + 1,
4769 if ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0)
4772 png_do_rgb_to_gray(png_ptr, row_info,
4773 png_ptr->row_buf + 1);
4777 png_ptr->rgb_to_gray_status=1;
4778 if ((png_ptr->transformations & PNG_RGB_TO_GRAY) ==
4780 png_warning(png_ptr, "png_do_rgb_to_gray found nongray pixel");
4782 if ((png_ptr->transformations & PNG_RGB_TO_GRAY) ==
4784 png_error(png_ptr, "png_do_rgb_to_gray found nongray pixel");
4824 if ((png_ptr->transformations & PNG_GRAY_TO_RGB) != 0 &&
4825 (png_ptr->mode & PNG_BACKGROUND_IS_GRAY) == 0)
4826 png_do_gray_to_rgb(row_info, png_ptr->row_buf + 1);
4831 if ((png_ptr->transformations & PNG_COMPOSE) != 0)
4832 png_do_compose(row_info, png_ptr->row_buf + 1, png_ptr);
4836 if ((png_ptr->transformations & PNG_GAMMA) != 0 &&
4839 (png_ptr->transformations & PNG_RGB_TO_GRAY) == 0 &&
4846 !((png_ptr->transformations & PNG_COMPOSE) != 0 &&
4847 ((png_ptr->num_trans != 0) ||
4848 (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) != 0)) &&
4853 (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE))
4854 png_do_gamma(row_info, png_ptr->row_buf + 1, png_ptr);
4858 if ((png_ptr->transformations & PNG_STRIP_ALPHA) != 0 &&
4859 (png_ptr->transformations & PNG_COMPOSE) != 0 &&
4862 png_do_strip_channel(row_info, png_ptr->row_buf + 1,
4867 if ((png_ptr->transformations & PNG_ENCODE_ALPHA) != 0 &&
4869 png_ptr->row_buf + 1, png_ptr);
4873 if ((png_ptr->transformations & PNG_SCALE_16_TO_8) != 0)
4874 png_do_scale_16_to_8(row_info, png_ptr->row_buf + 1);
4882 if ((png_ptr->transformations & PNG_16_TO_8) != 0)
4883 png_do_chop(row_info, png_ptr->row_buf + 1);
4887 if ((png_ptr->transformations & PNG_QUANTIZE) != 0)
4889 png_do_quantize(row_info, png_ptr->row_buf + 1,
4890 png_ptr->palette_lookup, png_ptr->quantize_index);
4893 png_error(png_ptr, "png_do_quantize returned rowbytes=0");
4903 if ((png_ptr->transformations & PNG_EXPAND_16) != 0)
4904 png_do_expand_16(row_info, png_ptr->row_buf + 1);
4909 if ((png_ptr->transformations & PNG_GRAY_TO_RGB) != 0 &&
4910 (png_ptr->mode & PNG_BACKGROUND_IS_GRAY) != 0)
4911 png_do_gray_to_rgb(row_info, png_ptr->row_buf + 1);
4915 if ((png_ptr->transformations & PNG_INVERT_MONO) != 0)
4916 png_do_invert(row_info, png_ptr->row_buf + 1);
4920 if ((png_ptr->transformations & PNG_INVERT_ALPHA) != 0)
4921 png_do_read_invert_alpha(row_info, png_ptr->row_buf + 1);
4925 if ((png_ptr->transformations & PNG_SHIFT) != 0)
4926 png_do_unshift(row_info, png_ptr->row_buf + 1,
4927 &(png_ptr->shift));
4931 if ((png_ptr->transformations & PNG_PACK) != 0)
4932 png_do_unpack(row_info, png_ptr->row_buf + 1);
4938 png_ptr->num_palette_max >= 0)
4939 png_do_check_palette_indexes(png_ptr, row_info);
4943 if ((png_ptr->transformations & PNG_BGR) != 0)
4944 png_do_bgr(row_info, png_ptr->row_buf + 1);
4948 if ((png_ptr->transformations & PNG_PACKSWAP) != 0)
4949 png_do_packswap(row_info, png_ptr->row_buf + 1);
4953 if ((png_ptr->transformations & PNG_FILLER) != 0)
4954 png_do_read_filler(row_info, png_ptr->row_buf + 1,
4955 (png_uint_32)png_ptr->filler, png_ptr->flags);
4959 if ((png_ptr->transformations & PNG_SWAP_ALPHA) != 0)
4960 png_do_read_swap_alpha(row_info, png_ptr->row_buf + 1);
4965 if ((png_ptr->transformations & PNG_SWAP_BYTES) != 0)
4966 png_do_swap(row_info, png_ptr->row_buf + 1);
4971 if ((png_ptr->transformations & PNG_USER_TRANSFORM) != 0)
4973 if (png_ptr->read_user_transform_fn != NULL)
4974 (*(png_ptr->read_user_transform_fn)) /* User read transform function */
4975 (png_ptr, /* png_ptr */
4983 png_ptr->row_buf + 1); /* start of pixel data for row */
4985 if (png_ptr->user_transform_depth != 0)
4986 row_info->bit_depth = png_ptr->user_transform_depth;
4988 if (png_ptr->user_transform_channels != 0)
4989 row_info->channels = png_ptr->user_transform_channels;