Home | History | Annotate | Download | only in libpng

Lines Matching full:png_ptr

26 png_set_crc_action(png_structp png_ptr, int crit_action, int ancil_action)
30 if (png_ptr == NULL)
40 png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
41 png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE;
45 png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
46 png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE |
51 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;
96 png_set_background(png_structp png_ptr,
102 if (png_ptr == NULL)
106 png_warning(png_ptr, "Application must supply a known background gamma");
110 png_ptr->transformations |= PNG_BACKGROUND;
111 png_memcpy(&(png_ptr->background), background_color,
113 png_ptr->background_gamma = (float)background_gamma;
114 png_ptr->background_gamma_type = (png_byte)(background_gamma_code);
115 png_ptr->transformations |= (need_expand ? PNG_BACKGROUND_EXPAND : 0);
122 png_set_strip_16(png_structp png_ptr)
126 if (png_ptr == NULL)
128 png_ptr->transformations |= PNG_16_TO_8;
134 png_set_strip_alpha(png_structp png_ptr)
138 if (png_ptr == NULL)
140 png_ptr->flags |= PNG_FLAG_STRIP_ALPHA;
164 png_set_dither(png_structp png_ptr, png_colorp palette,
170 if (png_ptr == NULL)
172 png_ptr->transformations |= PNG_DITHER;
178 png_ptr->dither_index = (png_bytep)png_malloc(png_ptr,
181 png_ptr->dither_index[i] = (png_byte)i;
195 png_ptr->dither_sort = (png_bytep)png_malloc(png_ptr,
200 png_ptr->dither_sort[i] = (png_byte)i;
217 if (histogram[png_ptr->dither_sort[j]]
218 < histogram[png_ptr->dither_sort[j + 1]])
222 t = png_ptr->dither_sort[j];
223 png_ptr->dither_sort[j] = png_ptr->dither_sort[j + 1];
224 png_ptr->dither_sort[j + 1] = t;
242 if ((int)png_ptr->dither_sort[i] >= maximum_colors)
246 while ((int)png_ptr->dither_sort[j] >= maximum_colors);
261 if ((int)png_ptr->dither_sort[i] >= maximum_colors)
267 while ((int)png_ptr->dither_sort[j] >= maximum_colors);
273 png_ptr->dither_index[j] = (png_byte)i;
274 png_ptr->dither_index[i] = (png_byte)j;
281 if ((int)png_ptr->dither_index[i] >= maximum_colors)
286 d_index = png_ptr->dither_index[i];
301 png_ptr->dither_index[i] = (png_byte)min_k;
305 png_free(png_ptr, png_ptr->dither_sort);
306 png_ptr->dither_sort = NULL;
327 png_ptr->index_to_palette = (png_bytep)png_malloc(png_ptr,
329 png_ptr->palette_to_index = (png_bytep)png_malloc(png_ptr,
335 png_ptr->index_to_palette[i] = (png_byte)i;
336 png_ptr->palette_to_index[i] = (png_byte)i;
339 hash = (png_dsortpp)png_calloc(png_ptr, (png_uint_32)(769 *
369 t = (png_dsortp)png_malloc_warn(png_ptr,
392 if ((int)png_ptr->index_to_palette[p->left]
394 (int)png_ptr->index_to_palette[p->right]
411 palette[png_ptr->index_to_palette[j]]
419 if (png_ptr->dither_index[k] ==
420 png_ptr->index_to_palette[j])
421 png_ptr->dither_index[k] =
422 png_ptr->index_to_palette[next_j];
423 if ((int)png_ptr->dither_index[k] ==
425 png_ptr->dither_index[k] =
426 png_ptr->index_to_palette[j];
430 png_ptr->index_to_palette[png_ptr->palette_to_index
431 [num_new_palette]] = png_ptr->index_to_palette[j];
432 png_ptr->palette_to_index[png_ptr->index_to_palette[j]]
433 = png_ptr->palette_to_index[num_new_palette];
435 png_ptr->index_to_palette[j] =
437 png_ptr->palette_to_index[num_new_palette] =
456 png_free(png_ptr, p);
464 png_free(png_ptr, hash);
465 png_free(png_ptr, png_ptr->palette_to_index);
466 png_free(png_ptr, png_ptr->index_to_palette);
467 png_ptr->palette_to_index = NULL;
468 png_ptr->index_to_palette = NULL;
472 if (png_ptr->palette == NULL)
474 png_ptr->palette = palette;
476 png_ptr->num_palette = (png_uint_16)num_palette;
489 png_ptr->palette_lookup = (png_bytep )png_calloc(png_ptr,
492 distance = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_entries *
529 png_ptr->palette_lookup[d_index] = (png_byte)i;
536 png_free(png_ptr, distance);
552 png_set_gamma(png_structp png_ptr, double scrn_gamma, double file_gamma)
556 if (png_ptr == NULL)
560 (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) ||
561 (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE))
562 png_ptr->transformations |= PNG_GAMMA;
563 png_ptr->gamma = (float)file_gamma;
564 png_ptr->screen_gamma = (float)scrn_gamma;
574 png_set_expand(png_structp png_ptr)
578 if (png_ptr == NULL)
581 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
582 png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
605 png_set_palette_to_rgb(png_structp png_ptr)
609 if (png_ptr == NULL)
612 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
613 png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
619 png_set_expand_gray_1_2_4_to_8(png_structp png_ptr)
623 if (png_ptr == NULL)
626 png_ptr->transformations |= PNG_EXPAND;
627 png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
635 png_set_gray_1_2_4_to_8(png_structp png_ptr)
639 if (png_ptr == NULL)
642 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
649 png_set_tRNS_to_alpha(png_structp png_ptr)
653 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
654 png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
660 png_set_gray_to_rgb(png_structp png_ptr)
664 png_ptr->transformations |= PNG_GRAY_TO_RGB;
665 png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
676 png_set_rgb_to_gray(png_structp png_ptr, int error_action, double red,
681 if (png_ptr == NULL)
683 png_set_rgb_to_gray_fixed(png_ptr, error_action, red_fixed, green_fixed);
688 png_set_rgb_to_gray_fixed(png_structp png_ptr, int error_action,
693 if (png_ptr == NULL)
698 case 1: png_ptr->transformations |= PNG_RGB_TO_GRAY;
701 case 2: png_ptr->transformations |= PNG_RGB_TO_GRAY_WARN;
704 case 3: png_ptr->transformations |= PNG_RGB_TO_GRAY_ERR;
706 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
708 png_ptr->transformations |= PNG_EXPAND;
711 png_warning(png_ptr,
713 png_ptr->transformations &= ~PNG_RGB_TO_GRAY;
730 png_warning(png_ptr, "ignoring out of range rgb_to_gray coefficients");
734 png_ptr->rgb_to_gray_red_coeff = red_int;
735 png_ptr->rgb_to_gray_green_coeff = green_int;
736 png_ptr->rgb_to_gray_blue_coeff =
746 png_set_read_user_transform_fn(png_structp png_ptr, png_user_transform_ptr
751 if (png_ptr == NULL)
755 png_ptr->transformations |= PNG_USER_TRANSFORM;
756 png_ptr->read_user_transform_fn = read_user_transform_fn;
760 png_warning(png_ptr,
770 png_init_read_transformations(png_structp png_ptr)
775 if (png_ptr != NULL)
781 int color_type = png_ptr->color_type;
797 if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&
800 png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;
801 } else if ((png_ptr->transformations & PNG_BACKGROUND) &&
802 !(png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&
803 (png_ptr->transformations & PNG_GRAY_TO_RGB) &&
804 png_ptr->background.red == png_ptr->background.green &&
805 png_ptr->background.red == png_ptr->background.blue)
807 png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;
808 png_ptr->background.gray = png_ptr->background.red;
812 if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&
813 (png_ptr->transformations & PNG_EXPAND))
818 switch (png_ptr->bit_depth)
821 png_ptr->background.gray *= (png_uint_16)0xff;
822 png_ptr->background.red = png_ptr->background.green
823 = png_ptr->background.blue = png_ptr->background.gray;
824 if (!(png_ptr->transformations & PNG_EXPAND_tRNS))
826 png_ptr->trans_values.gray *= (png_uint_16)0xff;
827 png_ptr->trans_values.red = png_ptr->trans_values.green
828 = png_ptr->trans_values.blue = png_ptr->trans_values.gray;
833 png_ptr->background.gray *= (png_uint_16)0x55;
834 png_ptr->background.red = png_ptr->background.green
835 = png_ptr->background.blue = png_ptr->background.gray;
836 if (!(png_ptr->transformations & PNG_EXPAND_tRNS))
838 png_ptr->trans_values.gray *= (png_uint_16)0x55;
839 png_ptr->trans_values.red = png_ptr->trans_values.green
840 = png_ptr->trans_values.blue = png_ptr->trans_values.gray;
845 png_ptr->background.gray *= (png_uint_16)0x11;
846 png_ptr->background.red = png_ptr->background.green
847 = png_ptr->background.blue = png_ptr->background.gray;
848 if (!(png_ptr->transformations & PNG_EXPAND_tRNS))
850 png_ptr->trans_values.gray *= (png_uint_16)0x11;
851 png_ptr->trans_values.red = png_ptr->trans_values.green
852 = png_ptr->trans_values.blue = png_ptr->trans_values.gray;
859 png_ptr->background.red = png_ptr->background.green
860 = png_ptr->background.blue = png_ptr->background.gray;
866 png_ptr->background.red =
867 png_ptr->palette[png_ptr->background.index].red;
868 png_ptr->background.green =
869 png_ptr->palette[png_ptr->background.index].green;
870 png_ptr->background.blue =
871 png_ptr->palette[png_ptr->background.index].blue;
874 if (png_ptr->transformations & PNG_INVERT_ALPHA)
877 if (!(png_ptr->transformations & PNG_EXPAND_tRNS))
884 istop=(int)png_ptr->num_trans;
886 png_ptr->trans[i] = (png_byte)(255 - png_ptr->trans[i]);
896 png_ptr->background_1 = png_ptr->background;
900 if ((color_type == PNG_COLOR_TYPE_PALETTE && png_ptr->num_trans != 0)
901 && (fabs(png_ptr->screen_gamma * png_ptr->gamma - 1.0)
906 for (i=0; i<png_ptr->num_trans; i++)
908 if (png_ptr->trans[i] != 0 && png_ptr->trans[i] != 0xff)
912 png_ptr->transformations &= ~PNG_GAMMA;
915 if ((png_ptr->transformations & (PNG_GAMMA | PNG_RGB_TO_GRAY)) &&
916 png_ptr->gamma != 0.0)
918 png_build_gamma_table(png_ptr);
921 if (png_ptr->transformations & PNG_BACKGROUND)
927 png_colorp palette = png_ptr->palette;
928 int num_palette = png_ptr->num_palette;
930 if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE)
932 back.red = png_ptr->gamma_table[png_ptr->background.red];
933 back.green = png_ptr->gamma_table[png_ptr->background.green];
934 back.blue = png_ptr->gamma_table[png_ptr->background.blue];
936 back_1.red = png_ptr->gamma_to_1[png_ptr->background.red];
937 back_1.green = png_ptr->gamma_to_1[png_ptr->background.green];
938 back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue];
944 switch (png_ptr->background_gamma_type)
947 g = (png_ptr->screen_gamma);
952 g = 1.0 / (png_ptr->gamma);
953 gs = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma);
957 g = 1.0 / (png_ptr->background_gamma);
958 gs = 1.0 / (png_ptr->background_gamma *
959 png_ptr->screen_gamma);
968 back.red = (png_byte)png_ptr->background.red;
969 back.green = (png_byte)png_ptr->background.green;
970 back.blue = (png_byte)png_ptr->background.blue;
975 (double)png_ptr->background.red/255, gs) * 255.0 + .5);
977 (double)png_ptr->background.green/255, gs) * 255.0
980 (double)png_ptr->background.blue/255, gs) * 255.0 + .5);
984 (double)png_ptr->background.red/255, g) * 255.0 + .5);
986 (double)png_ptr->background.green/255, g) * 255.0 + .5);
988 (double)png_ptr->background.blue/255, g) * 255.0 + .5);
992 if (i < (int)png_ptr->num_trans && png_ptr->trans[i] != 0xff)
994 if (png_ptr->trans[i] == 0)
998 else /* if (png_ptr->trans[i] != 0xff) */
1002 v = png_ptr->gamma_to_1[palette[i].red];
1003 png_composite(w, v, png_ptr->trans[i], back_1.red);
1004 palette[i].red = png_ptr->gamma_from_1[w];
1006 v = png_ptr->gamma_to_1[palette[i].green];
1007 png_composite(w, v, png_ptr->trans[i], back_1.green);
1008 palette[i].green = png_ptr->gamma_from_1[w];
1010 v = png_ptr->gamma_to_1[palette[i].blue];
1011 png_composite(w, v, png_ptr->trans[i], back_1.blue);
1012 palette[i].blue = png_ptr->gamma_from_1[w];
1017 palette[i].red = png_ptr->gamma_table[palette[i].red];
1018 palette[i].green = png_ptr->gamma_table[palette[i].green];
1019 palette[i].blue = png_ptr->gamma_table[palette[i].blue];
1027 png_ptr->transformations &= ~PNG_BACKGROUND;
1028 png_ptr->transformations &= ~PNG_GAMMA;
1029 png_ptr->transformations |= PNG_STRIP_ALPHA;
1031 /* if (png_ptr->background_gamma_type!=PNG_BACKGROUND_GAMMA_UNKNOWN) */
1035 double m = (double)(((png_uint_32)1 << png_ptr->bit_depth) - 1);
1039 switch (png_ptr->background_gamma_type)
1042 g = (png_ptr->screen_gamma);
1047 g = 1.0 / (png_ptr->gamma);
1048 gs = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma);
1052 g = 1.0 / (png_ptr->background_gamma);
1053 gs = 1.0 / (png_ptr->background_gamma *
1054 png_ptr->screen_gamma);
1058 png_ptr->background_1.gray = (png_uint_16)(pow(
1059 (double)png_ptr->background.gray / m, g) * m + .5);
1060 png_ptr->background.gray = (png_uint_16)(pow(
1061 (double)png_ptr->background.gray / m, gs) * m + .5);
1063 if ((png_ptr->background.red != png_ptr->background.green) ||
1064 (png_ptr->background.red != png_ptr->background.blue) ||
1065 (png_ptr->background.red != png_ptr->background.gray))
1068 png_ptr->background_1.red = (png_uint_16)(pow(
1069 (double)png_ptr->background.red / m, g) * m + .5);
1070 png_ptr->background_1.green = (png_uint_16)(pow(
1071 (double)png_ptr->background.green / m, g) * m + .5);
1072 png_ptr->background_1.blue = (png_uint_16)(pow(
1073 (double)png_ptr->background.blue / m, g) * m + .5);
1074 png_ptr->background.red = (png_uint_16)(pow(
1075 (double)png_ptr->background.red / m, gs) * m + .5);
1076 png_ptr->background.green = (png_uint_16)(pow(
1077 (double)png_ptr->background.green / m, gs) * m + .5);
1078 png_ptr->background.blue = (png_uint_16)(pow(
1079 (double)png_ptr->background.blue / m, gs) * m + .5);
1084 png_ptr->background_1.red = png_ptr->background_1.green
1085 = png_ptr->background_1.blue = png_ptr->background_1.gray;
1086 png_ptr->background.red = png_ptr->background.green
1087 = png_ptr->background.blue = png_ptr->background.gray;
1096 png_colorp palette = png_ptr->palette;
1097 int num_palette = png_ptr->num_palette;
1102 palette[i].red = png_ptr->gamma_table[palette[i].red];
1103 palette[i].green = png_ptr->gamma_table[palette[i].green];
1104 palette[i].blue = png_ptr->gamma_table[palette[i].blue];
1108 png_ptr->transformations &= ~PNG_GAMMA;
1117 if ((png_ptr->transformations & PNG_BACKGROUND) &&
1121 int istop = (int)png_ptr->num_trans;
1123 png_colorp palette = png_ptr->palette;
1125 back.red = (png_byte)png_ptr->background.red;
1126 back.green = (png_byte)png_ptr->background.green;
1127 back.blue = (png_byte)png_ptr->background.blue;
1131 if (png_ptr->trans[i] == 0)
1135 else if (png_ptr->trans[i] != 0xff)
1139 png_ptr->trans[i], back.red);
1141 png_ptr->trans[i], back.green);
1143 png_ptr->trans[i], back.blue);
1148 png_ptr->transformations &= ~PNG_BACKGROUND;
1149 png_ptr->transformations |= PNG_STRIP_ALPHA;
1154 if ((png_ptr->transformations & PNG_SHIFT) &&
1158 png_uint_16 istop = png_ptr->num_palette;
1159 int sr = 8 - png_ptr->sig_bit.red;
1160 int sg = 8 - png_ptr->sig_bit.green;
1161 int sb = 8 - png_ptr->sig_bit.blue;
1171 png_ptr->palette[i].red >>= sr;
1172 png_ptr->palette[i].green >>= sg;
1173 png_ptr->palette[i].blue >>= sb;
1180 if (png_ptr)
1190 png_read_transform_info(png_structp png_ptr, png_infop info_ptr)
1195 if (png_ptr->transformations & PNG_EXPAND)
1199 if (png_ptr->num_trans &&
1200 (png_ptr->transformations & PNG_EXPAND_tRNS))
1209 if (png_ptr->num_trans)
1211 if (png_ptr->transformations & PNG_EXPAND_tRNS)
1222 if (png_ptr->transformations & PNG_BACKGROUND)
1226 info_ptr->background = png_ptr->background;
1231 if (png_ptr->transformations & PNG_GAMMA)
1234 info_ptr->gamma = png_ptr->gamma;
1237 info_ptr->int_gamma = png_ptr->int_gamma;
1243 if ((png_ptr->transformations & PNG_16_TO_8) && (info_ptr->bit_depth == 16))
1248 if (png_ptr->transformations & PNG_GRAY_TO_RGB)
1253 if (png_ptr->transformations & PNG_RGB_TO_GRAY)
1258 if (png_ptr->transformations & PNG_DITHER)
1262 png_ptr->palette_lookup && info_ptr->bit_depth == 8)
1270 if ((png_ptr->transformations & PNG_PACK) && (info_ptr->bit_depth < 8))
1282 if (png_ptr->flags & PNG_FLAG_STRIP_ALPHA)
1291 if ((png_ptr->transformations & PNG_FILLER) &&
1298 if (png_ptr->transformations & PNG_ADD_ALPHA)
1306 if (png_ptr->transformations & PNG_USER_TRANSFORM)
1308 if (info_ptr->bit_depth < png_ptr->user_transform_depth)
1309 info_ptr->bit_depth = png_ptr->user_transform_depth;
1310 if (info_ptr->channels < png_ptr->user_transform_channels)
1311 info_ptr->channels = png_ptr->user_transform_channels;
1321 if (png_ptr)
1331 png_do_read_transformations(png_structp png_ptr)
1335 if (png_ptr->row_buf == NULL)
1341 "NULL row buffer for row %ld, pass %d", (long)png_ptr->row_number,
1342 png_ptr->pass);
1343 png_error(png_ptr, msg);
1345 png_error(png_ptr, "NULL row buffer");
1349 if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
1355 png_error(png_ptr, "Uninitialized row");
1357 png_warning(png_ptr, "Uninitialized row");
1362 if (png_ptr->transformations & PNG_EXPAND)
1364 if (png_ptr->row_info.color_type == PNG_COLOR_TYPE_PALETTE)
1366 png_do_expand_palette(&(png_ptr->row_info), png_ptr->row_buf + 1,
1367 png_ptr->palette, png_ptr->trans, png_ptr->num_trans);
1371 if (png_ptr->num_trans &&
1372 (png_ptr->transformations & PNG_EXPAND_tRNS))
1373 png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1,
1374 &(png_ptr->trans_values));
1376 png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1,
1383 if (png_ptr->flags & PNG_FLAG_STRIP_ALPHA)
1384 png_do_strip_filler(&(png_ptr->row_info), png_ptr->row_buf + 1,
1385 PNG_FLAG_FILLER_AFTER | (png_ptr->flags & PNG_FLAG_STRIP_ALPHA));
1389 if (png_ptr->transformations & PNG_RGB_TO_GRAY)
1392 png_do_rgb_to_gray(png_ptr, &(png_ptr->row_info),
1393 png_ptr->row_buf + 1);
1396 png_ptr->rgb_to_gray_status=1;
1397 if ((png_ptr->transformations & PNG_RGB_TO_GRAY) ==
1399 png_warning(png_ptr, "png_do_rgb_to_gray found nongray pixel");
1400 if ((png_ptr->transformations & PNG_RGB_TO_GRAY) ==
1402 png_error(png_ptr, "png_do_rgb_to_gray found nongray pixel");
1442 if ((png_ptr->transformations & PNG_GRAY_TO_RGB) &&
1443 !(png_ptr->mode & PNG_BACKGROUND_IS_GRAY))
1444 png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1);
1448 if ((png_ptr->transformations & PNG_BACKGROUND) &&
1449 ((png_ptr->num_trans != 0 ) ||
1450 (png_ptr->color_type & PNG_COLOR_MASK_ALPHA)))
1451 png_do_background(&(png_ptr->row_info), png_ptr->row_buf + 1,
1452 &(png_ptr->trans_values), &(png_ptr->background)
1454 , &(png_ptr->background_1),
1455 png_ptr->gamma_table, png_ptr->gamma_from_1,
1456 png_ptr->gamma_to_1, png_ptr->gamma_16_table,
1457 png_ptr->gamma_16_from_1, png_ptr->gamma_16_to_1,
1458 png_ptr->gamma_shift
1464 if ((png_ptr->transformations & PNG_GAMMA) &&
1466 !((png_ptr->transformations & PNG_BACKGROUND) &&
1467 ((png_ptr->num_trans != 0) ||
1468 (png_ptr->color_type & PNG_COLOR_MASK_ALPHA))) &&
1470 (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE))
1471 png_do_gamma(&(png_ptr->row_info), png_ptr->row_buf + 1,
1472 png_ptr->gamma_table, png_ptr->gamma_16_table,
1473 png_ptr->gamma_shift);
1477 if (png_ptr->transformations & PNG_16_TO_8)
1478 png_do_chop(&(png_ptr->row_info), png_ptr->row_buf + 1);
1482 if (png_ptr->transformations & PNG_DITHER)
1484 png_do_dither((png_row_infop)&(png_ptr->row_info), png_ptr->row_buf + 1,
1485 png_ptr->palette_lookup, png_ptr->dither_index);
1486 if (png_ptr->row_info.rowbytes == (png_uint_32)0)
1487 png_error(png_ptr, "png_do_dither returned rowbytes=0");
1492 if (png_ptr->transformations & PNG_INVERT_MONO)
1493 png_do_invert(&(png_ptr->row_info), png_ptr->row_buf + 1);
1497 if (png_ptr->transformations & PNG_SHIFT)
1498 png_do_unshift(&(png_ptr->row_info), png_ptr->row_buf + 1,
1499 &(png_ptr->shift));
1503 if (png_ptr->transformations & PNG_PACK)
1504 png_do_unpack(&(png_ptr->row_info), png_ptr->row_buf + 1);
1508 if (png_ptr->transformations & PNG_BGR)
1509 png_do_bgr(&(png_ptr->row_info), png_ptr->row_buf + 1);
1513 if (png_ptr->transformations & PNG_PACKSWAP)
1514 png_do_packswap(&(png_ptr->row_info), png_ptr->row_buf + 1);
1519 if ((png_ptr->transformations & PNG_GRAY_TO_RGB) &&
1520 (png_ptr->mode & PNG_BACKGROUND_IS_GRAY))
1521 png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1);
1525 if (png_ptr->transformations & PNG_FILLER)
1526 png_do_read_filler(&(png_ptr->row_info), png_ptr->row_buf + 1,
1527 (png_uint_32)png_ptr->filler, png_ptr->flags);
1531 if (png_ptr->transformations & PNG_INVERT_ALPHA)
1532 png_do_read_invert_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1);
1536 if (png_ptr->transformations & PNG_SWAP_ALPHA)
1537 png_do_read_swap_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1);
1541 if (png_ptr->transformations & PNG_SWAP_BYTES)
1542 png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1);
1546 if (png_ptr->transformations & PNG_USER_TRANSFORM)
1548 if (png_ptr->read_user_transform_fn != NULL)
1549 (*(png_ptr->read_user_transform_fn)) /* User read transform function */
1550 (png_ptr, /* png_ptr */
1551 &(png_ptr->row_info), /* row_info: */
1558 png_ptr->row_buf + 1); /* start of pixel data for row */
1560 if (png_ptr->user_transform_depth)
1561 png_ptr->row_info.bit_depth = png_ptr->user_transform_depth;
1562 if (png_ptr->user_transform_channels)
1563 png_ptr->row_info.channels = png_ptr->user_transform_channels;
1565 png_ptr->row_info.pixel_depth = (png_byte)(png_ptr->row_info.bit_depth *
1566 png_ptr->row_info.channels);
1567 png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth,
1568 png_ptr->row_info.width);
2317 png_do_rgb_to_gray(png_structp png_ptr, png_row_infop row_info, png_bytep row)
2333 png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff;
2334 png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff;
2335 png_uint_32 bc = png_ptr->rgb_to_gray_blue_coeff;
2342 if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL)
2349 png_byte red = png_ptr->gamma_to_1[*(sp++)];
2350 png_byte green = png_ptr->gamma_to_1[*(sp++)];
2351 png_byte blue = png_ptr->gamma_to_1[*(sp++)];
2355 *(dp++) = png_ptr->gamma_from_1[
2386 if (png_ptr->gamma_16_to_1 != NULL &&
2387 png_ptr->gamma_16_from_1 != NULL)
2403 png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >>
2404 png_ptr->gamma_shift][red>>8];
2406 png_ptr->gamma_16_to_1[(green&0xff) >>
2407 png_ptr->gamma_shift][green>>8];
2408 png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >>
2409 png_ptr->gamma_shift][blue>>8];
2412 w = png_ptr->gamma_16_from_1[(gray16&0xff) >>
2413 png_ptr->gamma_shift][gray16 >> 8];
2448 if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL)
2454 png_byte red = png_ptr->gamma_to_1[*(sp++)];
2455 png_byte green = png_ptr->gamma_to_1[*(sp++)];
2456 png_byte blue = png_ptr->gamma_to_1[*(sp++)];
2459 *(dp++) = png_ptr->gamma_from_1
2484 if (png_ptr->gamma_16_to_1 != NULL &&
2485 png_ptr->gamma_16_from_1 != NULL)
2501 png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >>
2502 png_ptr->gamma_shift][red>>8];
2504 png_ptr->gamma_16_to_1[(green&0xff) >>
2505 png_ptr->gamma_shift][green>>8];
2506 png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >>
2507 png_ptr->gamma_shift][blue>>8];
2510 w = png_ptr->gamma_16_from_1[(gray16&0xff) >>
2511 png_ptr->gamma_shift][gray16 >> 8];
2611 png_correct_palette(png_structp png_ptr, png_colorp palette,
2619 if (png_ptr->transformations & (PNG_GAMMA | PNG_BACKGROUND))
2623 if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE)
2625 back.red = png_ptr->gamma_table[png_ptr->background.red];
2626 back.green = png_ptr->gamma_table[png_ptr->background.green];
2627 back.blue = png_ptr->gamma_table[png_ptr->background.blue];
2629 back_1.red = png_ptr->gamma_to_1[png_ptr->background.red];
2630 back_1.green = png_ptr->gamma_to_1[png_ptr->background.green];
2631 back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue];
2637 g = 1.0 / (png_ptr->background_gamma * png_ptr->screen_gamma);
2639 if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_SCREEN
2642 back.red = png_ptr->background.red;
2643 back.green = png_ptr->background.green;
2644 back.blue = png_ptr->background.blue;
2649 (png_byte)(pow((double)png_ptr->background.red/255, g) *
2652 (png_byte)(pow((double)png_ptr->background.green/255, g) *
2655 (png_byte)(pow((double)png_ptr->background.blue/255, g) *
2659 g = 1.0 / png_ptr->background_gamma;
2662 (png_byte)(pow((double)png_ptr->background.red/255, g) *
2665 (png_byte)(pow((double)png_ptr->background.green/255, g) *
2668 (png_byte)(pow((double)png_ptr->background.blue/255, g) *
2672 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
2678 if (i < png_ptr->num_trans && png_ptr->trans[i] == 0)
2682 else if (i < png_ptr->num_trans && png_ptr->trans[i] != 0xff)
2686 v = png_ptr->gamma_to_1[png_ptr->palette[i].red];
2687 png_composite(w, v, png_ptr->trans[i], back_1.red);
2688 palette[i].red = png_ptr->gamma_from_1[w];
2690 v = png_ptr->gamma_to_1[png_ptr->palette[i].green];
2691 png_composite(w, v, png_ptr->trans[i], back_1.green);
2692 palette[i].green = png_ptr->gamma_from_1[w];
2694 v = png_ptr->gamma_to_1[png_ptr->palette[i].blue];
2695 png_composite(w, v, png_ptr->trans[i], back_1.blue);
2696 palette[i].blue = png_ptr->gamma_from_1[w];
2700 palette[i].red = png_ptr->gamma_table[palette[i].red];
2701 palette[i].green = png_ptr->gamma_table[palette[i].green];
2702 palette[i].blue = png_ptr->gamma_table[palette[i].blue];
2712 if (palette[i].red == (png_byte)png_ptr->trans_values.gray)
2718 palette[i].red = png_ptr->gamma_table[palette[i].red];
2719 palette[i].green = png_ptr->gamma_table[palette[i].green];
2720 palette[i].blue = png_ptr->gamma_table[palette[i].blue];
2728 if (png_ptr->transformations & PNG_GAMMA)
2734 palette[i].red = png_ptr->gamma_table[palette[i].red];
2735 palette[i].green = png_ptr->gamma_table[palette[i].green];
2736 palette[i].blue = png_ptr->gamma_table[palette[i].blue];
2744 if (png_ptr->transformations & PNG_BACKGROUND)
2746 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
2750 back.red = (png_byte)png_ptr->background.red;
2751 back.green = (png_byte)png_ptr->background.green;
2752 back.blue = (png_byte)png_ptr->background.blue;
2754 for (i = 0; i < (int)png_ptr->num_trans; i++)
2756 if (png_ptr->trans[i] == 0)
2762 else if (png_ptr->trans[i] != 0xff)
2764 png_composite(palette[i].red, png_ptr->palette[i].red,
2765 png_ptr->trans[i], back.red);
2766 png_composite(palette[i].green, png_ptr->palette[i].green,
2767 png_ptr->trans[i], back.green);
2768 png_composite(palette[i].blue, png_ptr->palette[i].blue,
2769 png_ptr->trans[i], back.blue);
2779 if (i == (png_byte)png_ptr->trans_values.gray)
2781 palette[i].red = (png_byte)png_ptr->background.red;
2782 palette[i].green = (png_byte)png_ptr->background.green;
2783 palette[i].blue = (png_byte)png_ptr->background.blue;
3211 else /* if (png_ptr->bit_depth == 16) */
4173 png_build_gamma_table(png_structp png_ptr)
4177 if (png_ptr->bit_depth <= 8)
4182 if (png_ptr->screen_gamma > .000001)
4183 g = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma);
4188 png_ptr->gamma_table = (png_bytep)png_malloc(png_ptr,
4193 png_ptr->gamma_table[i] = (png_byte)(pow((double)i / 255.0,
4199 if (png_ptr->transformations & ((PNG_BACKGROUND) | PNG_RGB_TO_GRAY))
4202 g = 1.0 / (png_ptr->gamma);
4204 png_ptr->gamma_to_1 = (png_bytep)png_malloc(png_ptr,
4209 png_ptr->gamma_to_1[i] = (png_byte)(pow((double)i / 255.0,
4214 png_ptr->gamma_from_1 = (png_bytep)png_malloc(png_ptr,
4217 if (png_ptr->screen_gamma > 0.000001)
4218 g = 1.0 / png_ptr->screen_gamma;
4221 g = png_ptr->gamma; /* Probably doing rgb_to_gray */
4225 png_ptr->gamma_from_1[i] = (png_byte)(pow((double)i / 255.0,
4239 if (png_ptr->color_type & PNG_COLOR_MASK_COLOR)
4241 sig_bit = (int)png_ptr->sig_bit.red;
4243 if ((int)png_ptr->sig_bit.green > sig_bit)
4244 sig_bit = png_ptr->sig_bit.green;
4246 if ((int)png_ptr->sig_bit.blue > sig_bit)
4247 sig_bit = png_ptr->sig_bit.blue;
4251 sig_bit = (int)png_ptr->sig_bit.gray;
4260 if (png_ptr->transformations & PNG_16_TO_8)
4272 png_ptr->gamma_shift = (png_byte)shift;
4276 if (png_ptr->screen_gamma > .000001)
4277 g = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma);
4281 png_ptr->gamma_16_table = (png_uint_16pp)png_calloc(png_ptr,
4284 if (png_ptr->transformations & (PNG_16_TO_8 | PNG_BACKGROUND))
4291 png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr,
4304 png_ptr->gamma_16_table[(int)(last & (0xff >> shift))]
4312 png_ptr->gamma_16_table[(int)(last & (0xff >> shift))]
4321 png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr,
4328 png_ptr->gamma_16_table[i][j] =
4337 if (png_ptr->transformations & (PNG_BACKGROUND | PNG_RGB_TO_GRAY))
4340 g = 1.0 / (png_ptr->gamma);
4342 png_ptr->gamma_16_to_1 = (png_uint_16pp)png_calloc(png_ptr,
4347 png_ptr->gamma_16_to_1[i] = (png_uint_16p)png_malloc(png_ptr,
4354 png_ptr->gamma_16_to_1[i][j] =
4360 if (png_ptr->screen_gamma > 0.000001)
4361 g = 1.0 / png_ptr->screen_gamma;
4364 g = png_ptr->gamma; /* Probably doing rgb_to_gray */
4366 png_ptr->gamma_16_from_1 = (png_uint_16pp)png_calloc(png_ptr,
4371 png_ptr->gamma_16_from_1[i] = (png_uint_16p)png_malloc(png_ptr,
4379 png_ptr->gamma_16_from_1[i][j] =