Lines Matching defs:png_ptr

53 png_set_crc_action(png_structp png_ptr, int crit_action, int ancil_action)
57 if (png_ptr == NULL)
67 png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
68 png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE;
72 png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
73 png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE |
78 png_warning(png_ptr,
84 png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
95 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
96 png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE;
100 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
101 png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE |
106 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
107 png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_NOWARN;
114 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
122 png_set_background_fixed(png_structp png_ptr,
128 if (png_ptr == NULL)
133 png_warning(png_ptr, "Application must supply a known background gamma");
137 png_ptr->transformations |= PNG_COMPOSE | PNG_STRIP_ALPHA;
138 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
139 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
141 png_memcpy(&(png_ptr->background), background_color,
143 png_ptr->background_gamma = background_gamma;
144 png_ptr->background_gamma_type = (png_byte)(background_gamma_code);
146 png_ptr->transformations |= PNG_BACKGROUND_EXPAND;
148 png_ptr->transformations &= ~PNG_BACKGROUND_EXPAND;
153 png_set_background(png_structp png_ptr,
157 png_set_background_fixed(png_ptr, background_color, background_gamma_code,
158 need_expand, png_fixed(png_ptr, background_gamma, "png_set_background"));
169 png_set_scale_16(png_structp png_ptr)
173 if (png_ptr == NULL)
176 png_ptr->transformations |= PNG_SCALE_16_TO_8;
183 png_set_strip_16(png_structp png_ptr)
187 if (png_ptr == NULL)
190 png_ptr->transformations |= PNG_16_TO_8;
196 png_set_strip_alpha(png_structp png_ptr)
200 if (png_ptr == NULL)
203 png_ptr->transformations |= PNG_STRIP_ALPHA;
209 translate_gamma_flags(png_structp png_ptr, png_fixed_point output_gamma,
224 png_ptr->flags |= PNG_FLAG_ASSUME_sRGB;
246 convert_gamma_value(png_structp png_ptr, double output_gamma)
262 png_fixed_error(png_ptr, "gamma value");
271 png_set_alpha_mode_fixed(png_structp png_ptr, int mode,
279 if (png_ptr == NULL)
282 output_gamma = translate_gamma_flags(png_ptr, output_gamma, 1/*screen*/);
291 png_error(png_ptr, "output gamma out of expected range");
318 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
319 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
324 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
325 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
332 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
333 png_ptr->flags |= PNG_FLAG_OPTIMIZE_ALPHA;
339 png_ptr->transformations |= PNG_ENCODE_ALPHA;
340 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
344 png_error(png_ptr, "invalid alpha mode");
351 if (png_ptr->gamma == 0)
352 png_ptr->gamma = file_gamma;
355 png_ptr->screen_gamma = output_gamma;
363 png_memset(&png_ptr->background, 0, sizeof png_ptr->background);
364 png_ptr->background_gamma = png_ptr->gamma; /* just in case */
365 png_ptr->background_gamma_type = PNG_BACKGROUND_GAMMA_FILE;
366 png_ptr->transformations &= ~PNG_BACKGROUND_EXPAND;
368 if (png_ptr->transformations & PNG_COMPOSE)
369 png_error(png_ptr,
372 png_ptr->transformations |= PNG_COMPOSE;
376 png_ptr->flags |= PNG_FLAG_DETECT_UNINITIALIZED;
381 png_set_alpha_mode(png_structp png_ptr, int mode, double output_gamma)
383 png_set_alpha_mode_fixed(png_ptr, mode, convert_gamma_value(png_ptr,
409 png_set_quantize(png_structp png_ptr, png_colorp palette,
415 if (png_ptr == NULL)
418 png_ptr->transformations |= PNG_QUANTIZE;
424 png_ptr->quantize_index = (png_bytep)png_malloc(png_ptr,
427 png_ptr->quantize_index[i] = (png_byte)i;
441 png_ptr->quantize_sort = (png_bytep)png_malloc(png_ptr,
446 png_ptr->quantize_sort[i] = (png_byte)i;
463 if (histogram[png_ptr->quantize_sort[j]]
464 < histogram[png_ptr->quantize_sort[j + 1]])
468 t = png_ptr->quantize_sort[j];
469 png_ptr->quantize_sort[j] = png_ptr->quantize_sort[j + 1];
470 png_ptr->quantize_sort[j + 1] = t;
489 if ((int)png_ptr->quantize_sort[i] >= maximum_colors)
493 while ((int)png_ptr->quantize_sort[j] >= maximum_colors);
509 if ((int)png_ptr->quantize_sort[i] >= maximum_colors)
515 while ((int)png_ptr->quantize_sort[j] >= maximum_colors);
521 png_ptr->quantize_index[j] = (png_byte)i;
522 png_ptr->quantize_index[i] = (png_byte)j;
529 if ((int)png_ptr->quantize_index[i] >= maximum_colors)
534 d_index = png_ptr->quantize_index[i];
549 png_ptr->quantize_index[i] = (png_byte)min_k;
553 png_free(png_ptr, png_ptr->quantize_sort);
554 png_ptr->quantize_sort = NULL;
575 png_ptr->index_to_palette = (png_bytep)png_malloc(png_ptr,
577 png_ptr->palette_to_index = (png_bytep)png_malloc(png_ptr,
583 png_ptr->index_to_palette[i] = (png_byte)i;
584 png_ptr->palette_to_index[i] = (png_byte)i;
587 hash = (png_dsortpp)png_calloc(png_ptr, (png_uint_32)(769 *
617 t = (png_dsortp)png_malloc_warn(png_ptr,
642 if ((int)png_ptr->index_to_palette[p->left]
644 (int)png_ptr->index_to_palette[p->right]
661 palette[png_ptr->index_to_palette[j]]
669 if (png_ptr->quantize_index[k] ==
670 png_ptr->index_to_palette[j])
671 png_ptr->quantize_index[k] =
672 png_ptr->index_to_palette[next_j];
674 if ((int)png_ptr->quantize_index[k] ==
676 png_ptr->quantize_index[k] =
677 png_ptr->index_to_palette[j];
681 png_ptr->index_to_palette[png_ptr->palette_to_index
682 [num_new_palette]] = png_ptr->index_to_palette[j];
684 png_ptr->palette_to_index[png_ptr->index_to_palette[j]]
685 = png_ptr->palette_to_index[num_new_palette];
687 png_ptr->index_to_palette[j] =
690 png_ptr->palette_to_index[num_new_palette] =
709 png_free(png_ptr, p);
717 png_free(png_ptr, hash);
718 png_free(png_ptr, png_ptr->palette_to_index);
719 png_free(png_ptr, png_ptr->index_to_palette);
720 png_ptr->palette_to_index = NULL;
721 png_ptr->index_to_palette = NULL;
725 if (png_ptr->palette == NULL)
727 png_ptr->palette = palette;
729 png_ptr->num_palette = (png_uint_16)num_palette;
742 png_ptr->palette_lookup = (png_bytep)png_calloc(png_ptr,
745 distance = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_entries *
783 png_ptr->palette_lookup[d_index] = (png_byte)i;
790 png_free(png_ptr, distance);
797 png_set_gamma_fixed(png_structp png_ptr, png_fixed_point scrn_gamma,
802 if (png_ptr == NULL)
806 scrn_gamma = translate_gamma_flags(png_ptr, scrn_gamma, 1/*screen*/);
807 file_gamma = translate_gamma_flags(png_ptr, file_gamma, 0/*file*/);
821 png_error(png_ptr, "invalid file gamma in png_set_gamma");
824 png_error(png_ptr, "invalid screen gamma in png_set_gamma");
831 png_ptr->gamma = file_gamma;
832 png_ptr->screen_gamma = scrn_gamma;
837 png_set_gamma(png_structp png_ptr, double scrn_gamma, double file_gamma)
839 png_set_gamma_fixed(png_ptr, convert_gamma_value(png_ptr, scrn_gamma),
840 convert_gamma_value(png_ptr, file_gamma));
851 png_set_expand(png_structp png_ptr)
855 if (png_ptr == NULL)
858 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
859 png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
882 png_set_palette_to_rgb(png_structp png_ptr)
886 if (png_ptr == NULL)
889 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
890 png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
895 png_set_expand_gray_1_2_4_to_8(png_structp png_ptr)
899 if (png_ptr == NULL)
902 png_ptr->transformations |= PNG_EXPAND;
903 png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
910 png_set_tRNS_to_alpha(png_structp png_ptr)
914 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
915 png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
924 png_set_expand_16(png_structp png_ptr)
928 if (png_ptr == NULL)
931 png_ptr->transformations |= (PNG_EXPAND_16 | PNG_EXPAND | PNG_EXPAND_tRNS);
932 png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
935 png_ptr->flags |= PNG_FLAG_DETECT_UNINITIALIZED;
941 png_set_gray_to_rgb(png_structp png_ptr)
945 if (png_ptr != NULL)
948 png_set_expand_gray_1_2_4_to_8(png_ptr);
949 png_ptr->transformations |= PNG_GRAY_TO_RGB;
950 png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
957 png_set_rgb_to_gray_fixed(png_structp png_ptr, int error_action,
962 if (png_ptr == NULL)
968 png_ptr->transformations |= PNG_RGB_TO_GRAY;
972 png_ptr->transformations |= PNG_RGB_TO_GRAY_WARN;
976 png_ptr->transformations |= PNG_RGB_TO_GRAY_ERR;
980 png_error(png_ptr, "invalid error action to rgb_to_gray");
983 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
985 png_ptr->transformations |= PNG_EXPAND;
988 png_warning(png_ptr,
991 png_ptr->transformations &= ~PNG_RGB_TO_GRAY;
1002 png_ptr->rgb_to_gray_red_coeff = red_int;
1003 png_ptr->rgb_to_gray_green_coeff = green_int;
1004 png_ptr->rgb_to_gray_blue_coeff =
1011 png_warning(png_ptr,
1018 if (png_ptr->rgb_to_gray_red_coeff == 0 &&
1019 png_ptr->rgb_to_gray_green_coeff == 0 &&
1020 png_ptr->rgb_to_gray_blue_coeff == 0)
1022 png_ptr->rgb_to_gray_red_coeff = 6968; /* .212671 * 32768 + .5 */
1023 png_ptr->rgb_to_gray_green_coeff = 23434; /* .715160 * 32768 + .5 */
1024 png_ptr->rgb_to_gray_blue_coeff = 2366;
1036 png_set_rgb_to_gray(png_structp png_ptr, int error_action, double red,
1039 if (png_ptr == NULL)
1042 png_set_rgb_to_gray_fixed(png_ptr, error_action,
1043 png_fixed(png_ptr, red, "rgb to gray red coefficient"),
1044 png_fixed(png_ptr, green, "rgb to gray green coefficient"));
1053 png_set_read_user_transform_fn(png_structp png_ptr, png_user_transform_ptr
1058 if (png_ptr == NULL)
1062 png_ptr->transformations |= PNG_USER_TRANSFORM;
1063 png_ptr->read_user_transform_fn = read_user_transform_fn;
1100 png_init_palette_transformations(png_structp png_ptr)
1113 if (png_ptr->num_trans > 0)
1118 for (i=0; i<png_ptr->num_trans; ++i)
1119 if (png_ptr->trans_alpha[i] == 255)
1121 else if (png_ptr->trans_alpha[i] == 0)
1134 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
1135 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1138 png_ptr->transformations &= ~(PNG_COMPOSE | PNG_BACKGROUND_EXPAND);
1150 if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&
1151 (png_ptr->transformations & PNG_EXPAND))
1154 png_ptr->background.red =
1155 png_ptr->palette[png_ptr->background.index].red;
1156 png_ptr->background.green =
1157 png_ptr->palette[png_ptr->background.index].green;
1158 png_ptr->background.blue =
1159 png_ptr->palette[png_ptr->background.index].blue;
1162 if (png_ptr->transformations & PNG_INVERT_ALPHA)
1164 if (!(png_ptr->transformations & PNG_EXPAND_tRNS))
1169 int i, istop = png_ptr->num_trans;
1172 png_ptr->trans_alpha[i] = (png_byte)(255 -
1173 png_ptr->trans_alpha[i]);
1183 png_init_rgb_transformations(png_structp png_ptr)
1189 int input_has_alpha = (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) != 0;
1190 int input_has_transparency = png_ptr->num_trans > 0;
1200 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
1201 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1205 png_ptr->transformations &= ~(PNG_COMPOSE | PNG_BACKGROUND_EXPAND);
1217 if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&
1218 (png_ptr->transformations & PNG_EXPAND) &&
1219 !(png_ptr->color_type & PNG_COLOR_MASK_COLOR))
1224 switch (png_ptr->bit_depth)
1227 png_ptr->background.gray *= (png_uint_16)0xff;
1228 png_ptr->background.red = png_ptr->background.green
1229 = png_ptr->background.blue = png_ptr->background.gray;
1230 if (!(png_ptr->transformations & PNG_EXPAND_tRNS))
1232 png_ptr->trans_color.gray *= (png_uint_16)0xff;
1233 png_ptr->trans_color.red = png_ptr->trans_color.green
1234 = png_ptr->trans_color.blue = png_ptr->trans_color.gray;
1239 png_ptr->background.gray *= (png_uint_16)0x55;
1240 png_ptr->background.red = png_ptr->background.green
1241 = png_ptr->background.blue = png_ptr->background.gray;
1242 if (!(png_ptr->transformations & PNG_EXPAND_tRNS))
1244 png_ptr->trans_color.gray *= (png_uint_16)0x55;
1245 png_ptr->trans_color.red = png_ptr->trans_color.green
1246 = png_ptr->trans_color.blue = png_ptr->trans_color.gray;
1251 png_ptr->background.gray *= (png_uint_16)0x11;
1252 png_ptr->background.red = png_ptr->background.green
1253 = png_ptr->background.blue = png_ptr->background.gray;
1254 if (!(png_ptr->transformations & PNG_EXPAND_tRNS))
1256 png_ptr->trans_color.gray *= (png_uint_16)0x11;
1257 png_ptr->trans_color.red = png_ptr->trans_color.green
1258 = png_ptr->trans_color.blue = png_ptr->trans_color.gray;
1267 png_ptr->background.red = png_ptr->background.green
1268 = png_ptr->background.blue = png_ptr->background.gray;
1277 png_init_read_transformations(png_structp png_ptr)
1302 if (png_ptr->gamma != 0) /* has been set */
1304 if (png_ptr->screen_gamma != 0) /* screen set too */
1305 gamma_correction = png_gamma_threshold(png_ptr->gamma,
1306 png_ptr->screen_gamma);
1312 png_ptr->screen_gamma = png_reciprocal(png_ptr->gamma);
1315 else if (png_ptr->screen_gamma != 0)
1321 png_ptr->gamma = png_reciprocal(png_ptr->screen_gamma);
1329 png_ptr->screen_gamma = png_ptr->gamma = PNG_FP_1;
1340 png_ptr->transformations |= PNG_GAMMA;
1343 png_ptr->transformations &= ~PNG_GAMMA;
1377 if ((png_ptr->transformations & PNG_STRIP_ALPHA) &&
1378 !(png_ptr->transformations & PNG_COMPOSE))
1385 png_ptr->transformations &= ~(PNG_BACKGROUND_EXPAND | PNG_ENCODE_ALPHA |
1387 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1396 png_ptr->num_trans = 0;
1404 if (!png_gamma_significant(png_ptr->screen_gamma))
1406 png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
1407 png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
1429 if (png_ptr->transformations & PNG_BACKGROUND_EXPAND)
1434 if (!(png_ptr->color_type & PNG_COLOR_MASK_COLOR))
1435 png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;
1438 else if (png_ptr->transformations & PNG_COMPOSE)
1445 if (png_ptr->transformations & PNG_GRAY_TO_RGB)
1447 if (png_ptr->background.red == png_ptr->background.green &&
1448 png_ptr->background.red == png_ptr->background.blue)
1450 png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;
1451 png_ptr->background.gray = png_ptr->background.red;
1468 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
1469 png_init_palette_transformations(png_ptr);
1472 png_init_rgb_transformations(png_ptr);
1476 if ((png_ptr->transformations & PNG_EXPAND_16) &&
1477 (png_ptr->transformations & PNG_COMPOSE) &&
1478 !(png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&
1479 png_ptr->bit_depth != 16)
1492 CHOP(png_ptr->background.red);
1493 CHOP(png_ptr->background.green);
1494 CHOP(png_ptr->background.blue);
1495 CHOP(png_ptr->background.gray);
1511 png_ptr->background_1 = png_ptr->background;
1527 if ((png_ptr->transformations & PNG_GAMMA)
1528 || ((png_ptr->transformations & PNG_RGB_TO_GRAY)
1529 && (png_gamma_significant(png_ptr->gamma) ||
1530 png_gamma_significant(png_ptr->screen_gamma)))
1531 || ((png_ptr->transformations & PNG_COMPOSE)
1532 && (png_gamma_significant(png_ptr->gamma)
1533 || png_gamma_significant(png_ptr->screen_gamma)
1535 || (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_UNIQUE
1536 && png_gamma_significant(png_ptr->background_gamma))
1538 )) || ((png_ptr->transformations & PNG_ENCODE_ALPHA)
1539 && png_gamma_significant(png_ptr->screen_gamma))
1542 png_build_gamma_table(png_ptr, png_ptr->bit_depth);
1545 if (png_ptr->transformations & PNG_COMPOSE)
1547 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
1553 png_colorp palette = png_ptr->palette;
1554 int num_palette = png_ptr->num_palette;
1556 if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE)
1559 back.red = png_ptr->gamma_table[png_ptr->background.red];
1560 back.green = png_ptr->gamma_table[png_ptr->background.green];
1561 back.blue = png_ptr->gamma_table[png_ptr->background.blue];
1563 back_1.red = png_ptr->gamma_to_1[png_ptr->background.red];
1564 back_1.green = png_ptr->gamma_to_1[png_ptr->background.green];
1565 back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue];
1571 switch (png_ptr->background_gamma_type)
1574 g = (png_ptr->screen_gamma);
1579 g = png_reciprocal(png_ptr->gamma);
1580 gs = png_reciprocal2(png_ptr->gamma,
1581 png_ptr->screen_gamma);
1585 g = png_reciprocal(png_ptr->background_gamma);
1586 gs = png_reciprocal2(png_ptr->background_gamma,
1587 png_ptr->screen_gamma);
1597 back.red = png_gamma_8bit_correct(png_ptr->background.red,
1599 back.green = png_gamma_8bit_correct(png_ptr->background.green,
1601 back.blue = png_gamma_8bit_correct(png_ptr->background.blue,
1607 back.red = (png_byte)png_ptr->background.red;
1608 back.green = (png_byte)png_ptr->background.green;
1609 back.blue = (png_byte)png_ptr->background.blue;
1614 back_1.red = png_gamma_8bit_correct(png_ptr->background.red,
1617 png_ptr->background.green, g);
1618 back_1.blue = png_gamma_8bit_correct(png_ptr->background.blue,
1624 back_1.red = (png_byte)png_ptr->background.red;
1625 back_1.green = (png_byte)png_ptr->background.green;
1626 back_1.blue = (png_byte)png_ptr->background.blue;
1632 if (i < (int)png_ptr->num_trans &&
1633 png_ptr->trans_alpha[i] != 0xff)
1635 if (png_ptr->trans_alpha[i] == 0)
1639 else /* if (png_ptr->trans_alpha[i] != 0xff) */
1643 v = png_ptr->gamma_to_1[palette[i].red];
1644 png_composite(w, v, png_ptr->trans_alpha[i], back_1.red);
1645 palette[i].red = png_ptr->gamma_from_1[w];
1647 v = png_ptr->gamma_to_1[palette[i].green];
1648 png_composite(w, v, png_ptr->trans_alpha[i], back_1.green);
1649 palette[i].green = png_ptr->gamma_from_1[w];
1651 v = png_ptr->gamma_to_1[palette[i].blue];
1652 png_composite(w, v, png_ptr->trans_alpha[i], back_1.blue);
1653 palette[i].blue = png_ptr->gamma_from_1[w];
1658 palette[i].red = png_ptr->gamma_table[palette[i].red];
1659 palette[i].green = png_ptr->gamma_table[palette[i].green];
1660 palette[i].blue = png_ptr->gamma_table[palette[i].blue];
1670 png_ptr->transformations &= ~(PNG_COMPOSE | PNG_GAMMA);
1673 /* if (png_ptr->background_gamma_type!=PNG_BACKGROUND_GAMMA_UNKNOWN) */
1679 switch (png_ptr->background_gamma_type)
1682 g = png_ptr->screen_gamma;
1687 g = png_reciprocal(png_ptr->gamma);
1688 gs = png_reciprocal2(png_ptr->gamma, png_ptr->screen_gamma);
1692 g = png_reciprocal(png_ptr->background_gamma);
1693 gs = png_reciprocal2(png_ptr->background_gamma,
1694 png_ptr->screen_gamma);
1698 png_error(png_ptr, "invalid background gamma type");
1701 png_ptr->background_1.gray = png_gamma_correct(png_ptr,
1702 png_ptr->background.gray, g);
1704 png_ptr->background.gray = png_gamma_correct(png_ptr,
1705 png_ptr->background.gray, gs);
1707 if ((png_ptr->background.red != png_ptr->background.green) ||
1708 (png_ptr->background.red != png_ptr->background.blue) ||
1709 (png_ptr->background.red != png_ptr->background.gray))
1712 png_ptr->background_1.red = png_gamma_correct(png_ptr,
1713 png_ptr->background.red, g);
1715 png_ptr->background_1.green = png_gamma_correct(png_ptr,
1716 png_ptr->background.green, g);
1718 png_ptr->background_1.blue = png_gamma_correct(png_ptr,
1719 png_ptr->background.blue, g);
1721 png_ptr->background.red = png_gamma_correct(png_ptr,
1722 png_ptr->background.red, gs);
1724 png_ptr->background.green = png_gamma_correct(png_ptr,
1725 png_ptr->background.green, gs);
1727 png_ptr->background.blue = png_gamma_correct(png_ptr,
1728 png_ptr->background.blue, gs);
1734 png_ptr->background_1.red = png_ptr->background_1.green
1735 = png_ptr->background_1.blue = png_ptr->background_1.gray;
1737 png_ptr->background.red = png_ptr->background.green
1738 = png_ptr->background.blue = png_ptr->background.gray;
1741 }/* png_ptr->transformations & PNG_BACKGROUND */
1746 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
1748 png_colorp palette = png_ptr->palette;
1749 int num_palette = png_ptr->num_palette;
1757 palette[i].red = png_ptr->gamma_table[palette[i].red];
1758 palette[i].green = png_ptr->gamma_table[palette[i].green];
1759 palette[i].blue = png_ptr->gamma_table[palette[i].blue];
1763 png_ptr->transformations &= ~PNG_GAMMA;
1773 if ((png_ptr->transformations & PNG_COMPOSE) &&
1774 (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE))
1777 int istop = (int)png_ptr->num_trans;
1779 png_colorp palette = png_ptr->palette;
1781 back.red = (png_byte)png_ptr->background.red;
1782 back.green = (png_byte)png_ptr->background.green;
1783 back.blue = (png_byte)png_ptr->background.blue;
1787 if (png_ptr->trans_alpha[i] == 0)
1792 else if (png_ptr->trans_alpha[i] != 0xff)
1796 png_ptr->trans_alpha[i], back.red);
1799 png_ptr->trans_alpha[i], back.green);
1802 png_ptr->trans_alpha[i], back.blue);
1806 png_ptr->transformations &= ~PNG_COMPOSE;
1811 if ((png_ptr->transformations & PNG_SHIFT) &&
1812 (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE))
1815 png_uint_16 istop = png_ptr->num_palette;
1816 int sr = 8 - png_ptr->sig_bit.red;
1817 int sg = 8 - png_ptr->sig_bit.green;
1818 int sb = 8 - png_ptr->sig_bit.blue;
1831 png_ptr->palette[i].red >>= sr;
1832 png_ptr->palette[i].green >>= sg;
1833 png_ptr->palette[i].blue >>= sb;
1844 png_read_transform_info(png_structp png_ptr, png_infop info_ptr)
1849 if (png_ptr->transformations & PNG_EXPAND)
1857 if (png_ptr->num_trans > 0)
1868 if (png_ptr->num_trans)
1870 if (png_ptr->transformations & PNG_EXPAND_tRNS)
1886 if (png_ptr->transformations & PNG_COMPOSE)
1887 info_ptr->background = png_ptr->background;
1896 info_ptr->gamma = png_ptr->gamma;
1903 if (png_ptr->transformations & PNG_SCALE_16_TO_8)
1908 if (png_ptr->transformations & PNG_16_TO_8)
1922 png_ptr->transformations |= PNG_16_TO_8;
1927 png_ptr->transformations |= PNG_SCALE_16_TO_8;
1938 if (png_ptr->transformations & PNG_GRAY_TO_RGB)
1943 if (png_ptr->transformations & PNG_RGB_TO_GRAY)
1948 if (png_ptr->transformations & PNG_QUANTIZE)
1952 png_ptr->palette_lookup && info_ptr->bit_depth == 8)
1960 if (png_ptr->transformations & PNG_EXPAND_16 && info_ptr->bit_depth == 8 &&
1968 if ((png_ptr->transformations & PNG_PACK) && (info_ptr->bit_depth < 8))
1982 if (png_ptr->transformations & PNG_STRIP_ALPHA)
1994 if ((png_ptr->transformations & PNG_FILLER) &&
2000 if (png_ptr->transformations & PNG_ADD_ALPHA)
2007 if (png_ptr->transformations & PNG_USER_TRANSFORM)
2009 if (info_ptr->bit_depth < png_ptr->user_transform_depth)
2010 info_ptr->bit_depth = png_ptr->user_transform_depth;
2012 if (info_ptr->channels < png_ptr->user_transform_channels)
2013 info_ptr->channels = png_ptr->user_transform_channels;
2028 png_ptr->info_rowbytes = info_ptr->rowbytes;
2031 if (png_ptr)
2041 png_do_read_transformations(png_structp png_ptr)
2045 if (png_ptr->row_buf == NULL)
2051 png_error(png_ptr, "NULL row buffer");
2059 if ((png_ptr->flags & PNG_FLAG_DETECT_UNINITIALIZED) != 0 &&
2060 !(png_ptr->flags & PNG_FLAG_ROW_INIT))
2066 png_error(png_ptr, "Uninitialized row");
2070 if (png_ptr->transformations & PNG_EXPAND)
2072 if (png_ptr->row_info.color_type == PNG_COLOR_TYPE_PALETTE)
2074 png_do_expand_palette(&(png_ptr->row_info), png_ptr->row_buf + 1,
2075 png_ptr->palette, png_ptr->trans_alpha, png_ptr->num_trans);
2080 if (png_ptr->num_trans &&
2081 (png_ptr->transformations & PNG_EXPAND_tRNS))
2082 png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1,
2083 &(png_ptr->trans_color));
2086 png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1,
2093 if ((png_ptr->transformations & PNG_STRIP_ALPHA) &&
2094 !(png_ptr->transformations & PNG_COMPOSE) &&
2095 (png_ptr->row_info.color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
2096 png_ptr->row_info.color_type == PNG_COLOR_TYPE_GRAY_ALPHA))
2097 png_do_strip_channel(&(png_ptr->row_info), png_ptr->row_buf + 1,
2102 if (png_ptr->transformations & PNG_RGB_TO_GRAY)
2105 png_do_rgb_to_gray(png_ptr, &(png_ptr->row_info),
2106 png_ptr->row_buf + 1);
2110 png_ptr->rgb_to_gray_status=1;
2111 if ((png_ptr->transformations & PNG_RGB_TO_GRAY) ==
2113 png_warning(png_ptr, "png_do_rgb_to_gray found nongray pixel");
2115 if ((png_ptr->transformations & PNG_RGB_TO_GRAY) ==
2117 png_error(png_ptr, "png_do_rgb_to_gray found nongray pixel");
2157 if ((png_ptr->transformations & PNG_GRAY_TO_RGB) &&
2158 !(png_ptr->mode & PNG_BACKGROUND_IS_GRAY))
2159 png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1);
2164 if (png_ptr->transformations & PNG_COMPOSE)
2165 png_do_compose(&(png_ptr->row_info), png_ptr->row_buf + 1, png_ptr);
2169 if ((png_ptr->transformations & PNG_GAMMA) &&
2172 !((png_ptr->transformations & PNG_COMPOSE) &&
2173 ((png_ptr->num_trans != 0) ||
2174 (png_ptr->color_type & PNG_COLOR_MASK_ALPHA))) &&
2176 (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE))
2177 png_do_gamma(&(png_ptr->row_info), png_ptr->row_buf + 1, png_ptr);
2181 if ((png_ptr->transformations & PNG_STRIP_ALPHA) &&
2182 (png_ptr->transformations & PNG_COMPOSE) &&
2183 (png_ptr->row_info.color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
2184 png_ptr->row_info.color_type == PNG_COLOR_TYPE_GRAY_ALPHA))
2185 png_do_strip_channel(&(png_ptr->row_info), png_ptr->row_buf + 1,
2190 if ((png_ptr->transformations & PNG_ENCODE_ALPHA) &&
2191 (png_ptr->row_info.color_type & PNG_COLOR_MASK_ALPHA))
2192 png_do_encode_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1, png_ptr);
2196 if (png_ptr->transformations & PNG_SCALE_16_TO_8)
2197 png_do_scale_16_to_8(&(png_ptr->row_info), png_ptr->row_buf + 1);
2205 if (png_ptr->transformations & PNG_16_TO_8)
2206 png_do_chop(&(png_ptr->row_info), png_ptr->row_buf + 1);
2210 if (png_ptr->transformations & PNG_QUANTIZE)
2212 png_do_quantize(&(png_ptr->row_info), png_ptr->row_buf + 1,
2213 png_ptr->palette_lookup, png_ptr->quantize_index);
2215 if (png_ptr->row_info.rowbytes == 0)
2216 png_error(png_ptr, "png_do_quantize returned rowbytes=0");
2226 if (png_ptr->transformations & PNG_EXPAND_16)
2227 png_do_expand_16(&png_ptr->row_info, png_ptr->row_buf + 1);
2232 if ((png_ptr->transformations & PNG_GRAY_TO_RGB) &&
2233 (png_ptr->mode & PNG_BACKGROUND_IS_GRAY))
2234 png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1);
2238 if (png_ptr->transformations & PNG_INVERT_MONO)
2239 png_do_invert(&(png_ptr->row_info), png_ptr->row_buf + 1);
2243 if (png_ptr->transformations & PNG_SHIFT)
2244 png_do_unshift(&(png_ptr->row_info), png_ptr->row_buf + 1,
2245 &(png_ptr->shift));
2249 if (png_ptr->transformations & PNG_PACK)
2250 png_do_unpack(&(png_ptr->row_info), png_ptr->row_buf + 1);
2254 if (png_ptr->transformations & PNG_BGR)
2255 png_do_bgr(&(png_ptr->row_info), png_ptr->row_buf + 1);
2259 if (png_ptr->transformations & PNG_PACKSWAP)
2260 png_do_packswap(&(png_ptr->row_info), png_ptr->row_buf + 1);
2264 if (png_ptr->transformations & PNG_FILLER)
2265 png_do_read_filler(&(png_ptr->row_info), png_ptr->row_buf + 1,
2266 (png_uint_32)png_ptr->filler, png_ptr->flags);
2270 if (png_ptr->transformations & PNG_INVERT_ALPHA)
2271 png_do_read_invert_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1);
2275 if (png_ptr->transformations & PNG_SWAP_ALPHA)
2276 png_do_read_swap_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1);
2281 if (png_ptr->transformations & PNG_SWAP_BYTES)
2282 png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1);
2287 if (png_ptr->transformations & PNG_USER_TRANSFORM)
2289 if (png_ptr->read_user_transform_fn != NULL)
2290 (*(png_ptr->read_user_transform_fn)) /* User read transform function */
2291 (png_ptr, /* png_ptr */
2292 &(png_ptr->row_info), /* row_info: */
2299 png_ptr->row_buf + 1); /* start of pixel data for row */
2301 if (png_ptr->user_transform_depth)
2302 png_ptr->row_info.bit_depth = png_ptr->user_transform_depth;
2304 if (png_ptr->user_transform_channels)
2305 png_ptr->row_info.channels = png_ptr->user_transform_channels;
2307 png_ptr->row_info.pixel_depth = (png_byte)(png_ptr->row_info.bit_depth *
2308 png_ptr->row_info.channels);
2310 png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth,
2311 png_ptr->row_info.width);
3118 png_do_rgb_to_gray(png_structp png_ptr, png_row_infop row_info, png_bytep row)
3131 png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff;
3132 png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff;
3133 png_uint_32 bc = png_ptr->rgb_to_gray_blue_coeff;
3140 if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL)
3147 png_byte red = png_ptr->gamma_to_1[*(sp++)];
3148 png_byte green = png_ptr->gamma_to_1[*(sp++)];
3149 png_byte blue = png_ptr->gamma_to_1[*(sp++)];
3154 *(dp++) = png_ptr->gamma_from_1[
3188 if (png_ptr->gamma_16_to_1 != NULL &&
3189 png_ptr->gamma_16_from_1 != NULL)
3206 png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff)
3207 >> png_ptr->gamma_shift][red>>8];
3209 png_ptr->gamma_16_to_1[(green&0xff) >>
3210 png_ptr->gamma_shift][green>>8];
3211 png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff)
3212 >> png_ptr->gamma_shift][blue>>8];
3215 w = png_ptr->gamma_16_from_1[(gray16&0xff) >>
3216 png_ptr->gamma_shift][gray16 >> 8];
3252 if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL)
3258 png_byte red = png_ptr->gamma_to_1[*(sp++)];
3259 png_byte green = png_ptr->gamma_to_1[*(sp++)];
3260 png_byte blue = png_ptr->gamma_to_1[*(sp++)];
3265 *(dp++) = png_ptr->gamma_from_1
3292 if (png_ptr->gamma_16_to_1 != NULL &&
3293 png_ptr->gamma_16_from_1 != NULL)
3310 png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >>
3311 png_ptr->gamma_shift][red>>8];
3314 png_ptr->gamma_16_to_1[(green&0xff) >>
3315 png_ptr->gamma_shift][green>>8];
3317 png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >>
3318 png_ptr->gamma_shift][blue>>8];
3323 w = png_ptr->gamma_16_from_1[(gray16&0xff) >>
3324 png_ptr->gamma_shift][gray16 >> 8];
3435 png_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr)
3438 png_const_bytep gamma_table = png_ptr->gamma_table;
3439 png_const_bytep gamma_from_1 = png_ptr->gamma_from_1;
3440 png_const_bytep gamma_to_1 = png_ptr->gamma_to_1;
3441 png_const_uint_16pp gamma_16 = png_ptr->gamma_16_table;
3442 png_const_uint_16pp gamma_16_from_1 = png_ptr->gamma_16_from_1;
3443 png_const_uint_16pp gamma_16_to_1 = png_ptr->gamma_16_to_1;
3444 int gamma_shift = png_ptr->gamma_shift;
3450 int optimize = (png_ptr->flags & PNG_FLAG_OPTIMIZE_ALPHA) != 0;
3469 == png_ptr->trans_color.gray)
3472 *sp |= (png_byte)(png_ptr->background.gray << shift);
3497 == png_ptr->trans_color.gray)
3500 *sp |= (png_byte)(png_ptr->background.gray << shift);
3531 == png_ptr->trans_color.gray)
3534 *sp |= (png_byte)(png_ptr->background.gray << shift);
3560 == png_ptr->trans_color.gray)
3563 *sp |= (png_byte)(png_ptr->background.gray << shift);
3594 == png_ptr->trans_color.gray)
3597 *sp |= (png_byte)(png_ptr->background.gray << shift);
3621 if (*sp == png_ptr->trans_color.gray)
3622 *sp = (png_byte)png_ptr->background.gray;
3634 if (*sp == png_ptr->trans_color.gray)
3635 *sp = (png_byte)png_ptr->background.gray;
3653 if (v == png_ptr->trans_color.gray)
3656 *sp = (png_byte)((png_ptr->background.gray >> 8) & 0xff);
3657 *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);
3678 if (v == png_ptr->trans_color.gray)
3680 *sp = (png_byte)((png_ptr->background.gray >> 8) & 0xff);
3681 *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);
3704 if (*sp == png_ptr->trans_color.red &&
3705 *(sp + 1) == png_ptr->trans_color.green &&
3706 *(sp + 2) == png_ptr->trans_color.blue)
3708 *sp = (png_byte)png_ptr->background.red;
3709 *(sp + 1) = (png_byte)png_ptr->background.green;
3710 *(sp + 2) = (png_byte)png_ptr->background.blue;
3727 if (*sp == png_ptr->trans_color.red &&
3728 *(sp + 1) == png_ptr->trans_color.green &&
3729 *(sp + 2) == png_ptr->trans_color.blue)
3731 *sp = (png_byte)png_ptr->background.red;
3732 *(sp + 1) = (png_byte)png_ptr->background.green;
3733 *(sp + 2) = (png_byte)png_ptr->background.blue;
3754 if (r == png_ptr->trans_color.red &&
3755 g == png_ptr->trans_color.green &&
3756 b == png_ptr->trans_color.blue)
3759 *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
3760 *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
3761 *(sp + 2) = (png_byte)((png_ptr->background.green >> 8) & 0xff);
3762 *(sp + 3) = (png_byte)(png_ptr->background.green & 0xff);
3763 *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8) & 0xff);
3764 *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
3798 if (r == png_ptr->trans_color.red &&
3799 g == png_ptr->trans_color.green &&
3800 b == png_ptr->trans_color.blue)
3802 *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
3803 *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
3804 *(sp + 2) = (png_byte)((png_ptr->background.green >> 8) & 0xff);
3805 *(sp + 3) = (png_byte)(png_ptr->background.green & 0xff);
3806 *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8) & 0xff);
3807 *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
3834 *sp = (png_byte)png_ptr->background.gray;
3842 png_composite(w, v, a, png_ptr->background_1.gray);
3858 *sp = (png_byte)png_ptr->background.gray;
3861 png_composite(*sp, *sp, a, png_ptr->background_1.gray);
3865 else /* if (png_ptr->bit_depth == 16) */
3889 *sp = (png_byte)((png_ptr->background.gray >> 8) & 0xff);
3890 *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);
3898 png_composite_16(v, g, a, png_ptr->background_1.gray);
3919 *sp = (png_byte)((png_ptr->background.gray >> 8) & 0xff);
3920 *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);
3928 png_composite_16(v, g, a, png_ptr->background_1.gray);
3961 *sp = (png_byte)png_ptr->background.red;
3962 *(sp + 1) = (png_byte)png_ptr->background.green;
3963 *(sp + 2) = (png_byte)png_ptr->background.blue;
3971 png_composite(w, v, a, png_ptr->background_1.red);
3976 png_composite(w, v, a, png_ptr->background_1.green);
3981 png_composite(w, v, a, png_ptr->background_1.blue);
3997 *sp = (png_byte)png_ptr->background.red;
3998 *(sp + 1) = (png_byte)png_ptr->background.green;
3999 *(sp + 2) = (png_byte)png_ptr->background.blue;
4004 png_composite(*sp, *sp, a, png_ptr->background.red);
4007 png_ptr->background.green);
4010 png_ptr->background.blue);
4047 *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
4048 *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
4049 *(sp + 2) = (png_byte)((png_ptr->background.green >> 8) & 0xff);
4050 *(sp + 3) = (png_byte)(png_ptr->background.green & 0xff);
4051 *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8) & 0xff);
4052 *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
4060 png_composite_16(w, v, a, png_ptr->background_1.red);
4067 png_composite_16(w, v, a, png_ptr->background_1.green);
4075 png_composite_16(w, v, a, png_ptr->background_1.blue);
4096 *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
4097 *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
4098 *(sp + 2) = (png_byte)((png_ptr->background.green >> 8) & 0xff);
4099 *(sp + 3) = (png_byte)(png_ptr->background.green & 0xff);
4100 *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8) & 0xff);
4101 *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
4114 png_composite_16(v, r, a, png_ptr->background.red);
4118 png_composite_16(v, g, a, png_ptr->background.green);
4122 png_composite_16(v, b, a, png_ptr->background.blue);
4147 png_do_gamma(png_row_infop row_info, png_bytep row, png_structp png_ptr)
4149 png_const_bytep gamma_table = png_ptr->gamma_table;
4150 png_const_uint_16pp gamma_16_table = png_ptr->gamma_16_table;
4151 int gamma_shift = png_ptr->gamma_shift;
4348 png_do_encode_alpha(png_row_infop row_info, png_bytep row, png_structp png_ptr)
4358 PNG_CONST png_bytep table = png_ptr->gamma_from_1;
4377 PNG_CONST png_uint_16pp table = png_ptr->gamma_16_from_1;
4378 PNG_CONST int gamma_shift = png_ptr->gamma_shift;
4405 png_warning(png_ptr, "png_do_encode_alpha: unexpected call");