Lines Matching defs:png_ptr

21 png_set_crc_action(png_structp png_ptr, int crit_action, int ancil_action)
30 png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
31 png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE;
34 png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
35 png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE |
39 png_warning(png_ptr, "Can't discard critical data on CRC error.");
43 png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
52 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
53 png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE;
56 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
57 png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE |
61 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
62 png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_NOWARN;
67 png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
76 png_set_background(png_structp png_ptr,
83 png_warning(png_ptr, "Application must supply a known background gamma");
87 png_ptr->transformations |= PNG_BACKGROUND;
88 png_memcpy(&(png_ptr->background), background_color,
90 png_ptr->background_gamma = (float)background_gamma;
91 png_ptr->background_gamma_type = (png_byte)(background_gamma_code);
92 png_ptr->transformations |= (need_expand ? PNG_BACKGROUND_EXPAND : 0);
100 if ((need_expand && !(png_ptr->color_type & PNG_COLOR_MASK_COLOR)) ||
103 png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;
110 png_set_strip_16(png_structp png_ptr)
113 png_ptr->transformations |= PNG_16_TO_8;
119 png_set_strip_alpha(png_structp png_ptr)
122 png_ptr->flags |= PNG_FLAG_STRIP_ALPHA;
146 png_set_dither(png_structp png_ptr, png_colorp palette,
151 png_ptr->transformations |= PNG_DITHER;
157 png_ptr->dither_index = (png_bytep)png_malloc(png_ptr,
160 png_ptr->dither_index[i] = (png_byte)i;
173 png_ptr->dither_sort = (png_bytep)png_malloc(png_ptr,
178 png_ptr->dither_sort[i] = (png_byte)i;
194 if (histogram[png_ptr->dither_sort[j]]
195 < histogram[png_ptr->dither_sort[j + 1]])
199 t = png_ptr->dither_sort[j];
200 png_ptr->dither_sort[j] = png_ptr->dither_sort[j + 1];
201 png_ptr->dither_sort[j + 1] = t;
218 if ((int)png_ptr->dither_sort[i] >= maximum_colors)
222 while ((int)png_ptr->dither_sort[j] >= maximum_colors);
236 if ((int)png_ptr->dither_sort[i] >= maximum_colors)
242 while ((int)png_ptr->dither_sort[j] >= maximum_colors);
248 png_ptr->dither_index[j] = (png_byte)i;
249 png_ptr->dither_index[i] = (png_byte)j;
256 if ((int)png_ptr->dither_index[i] >= maximum_colors)
261 d_index = png_ptr->dither_index[i];
276 png_ptr->dither_index[i] = (png_byte)min_k;
280 png_free(png_ptr, png_ptr->dither_sort);
281 png_ptr->dither_sort=NULL;
302 png_ptr->index_to_palette = (png_bytep)png_malloc(png_ptr,
304 png_ptr->palette_to_index = (png_bytep)png_malloc(png_ptr,
310 png_ptr->index_to_palette[i] = (png_byte)i;
311 png_ptr->palette_to_index[i] = (png_byte)i;
314 hash = (png_dsortpp)png_malloc(png_ptr, (png_uint_32)(769 *
347 t = (png_dsortp)png_malloc_warn(png_ptr,
370 if ((int)png_ptr->index_to_palette[p->left]
372 (int)png_ptr->index_to_palette[p->right]
389 palette[png_ptr->index_to_palette[j]]
397 if (png_ptr->dither_index[k] ==
398 png_ptr->index_to_palette[j])
399 png_ptr->dither_index[k] =
400 png_ptr->index_to_palette[next_j];
401 if ((int)png_ptr->dither_index[k] ==
403 png_ptr->dither_index[k] =
404 png_ptr->index_to_palette[j];
408 png_ptr->index_to_palette[png_ptr->palette_to_index
409 [num_new_palette]] = png_ptr->index_to_palette[j];
410 png_ptr->palette_to_index[png_ptr->index_to_palette[j]]
411 = png_ptr->palette_to_index[num_new_palette];
413 png_ptr->index_to_palette[j] = (png_byte)num_new_palette;
414 png_ptr->palette_to_index[num_new_palette] = (png_byte)j;
432 png_free(png_ptr, p);
440 png_free(png_ptr, hash);
441 png_free(png_ptr, png_ptr->palette_to_index);
442 png_free(png_ptr, png_ptr->index_to_palette);
443 png_ptr->palette_to_index=NULL;
444 png_ptr->index_to_palette=NULL;
448 if (png_ptr->palette == NULL)
450 png_ptr->palette = palette;
452 png_ptr->num_palette = (png_uint_16)num_palette;
465 png_ptr->palette_lookup = (png_bytep )png_malloc(png_ptr,
468 png_memset(png_ptr->palette_lookup, 0, num_entries *
471 distance = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_entries *
508 png_ptr->palette_lookup[d_index] = (png_byte)i;
515 png_free(png_ptr, distance);
531 png_set_gamma(png_structp png_ptr, double scrn_gamma, double file_gamma)
535 (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) ||
536 (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE))
537 png_ptr->transformations |= PNG_GAMMA;
538 png_ptr->gamma = (float)file_gamma;
539 png_ptr->screen_gamma = (float)scrn_gamma;
549 png_set_expand(png_structp png_ptr)
552 png_ptr->transformations |= PNG_EXPAND;
571 png_set_palette_to_rgb(png_structp png_ptr)
574 png_ptr->transformations |= PNG_EXPAND;
579 png_set_gray_1_2_4_to_8(png_structp png_ptr)
582 png_ptr->transformations |= PNG_EXPAND;
587 png_set_tRNS_to_alpha(png_structp png_ptr)
590 png_ptr->transformations |= PNG_EXPAND;
596 png_set_gray_to_rgb(png_structp png_ptr)
599 png_ptr->transformations |= PNG_GRAY_TO_RGB;
610 png_set_rgb_to_gray(png_structp png_ptr, int error_action, double red,
615 png_set_rgb_to_gray_fixed(png_ptr, error_action, red_fixed, green_fixed);
620 png_set_rgb_to_gray_fixed(png_structp png_ptr, int error_action,
626 case 1: png_ptr->transformations |= PNG_RGB_TO_GRAY;
628 case 2: png_ptr->transformations |= PNG_RGB_TO_GRAY_WARN;
630 case 3: png_ptr->transformations |= PNG_RGB_TO_GRAY_ERR;
632 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
634 png_ptr->transformations |= PNG_EXPAND;
637 png_warning(png_ptr, "Cannot do RGB_TO_GRAY without EXPAND_SUPPORTED.");
638 png_ptr->transformations &= ~PNG_RGB_TO_GRAY;
655 png_warning(png_ptr, "ignoring out of range rgb_to_gray coefficients");
659 png_ptr->rgb_to_gray_red_coeff = red_int;
660 png_ptr->rgb_to_gray_green_coeff = green_int;
661 png_ptr->rgb_to_gray_blue_coeff = (png_uint_16)(32768-red_int-green_int);
670 png_set_read_user_transform_fn(png_structp png_ptr, png_user_transform_ptr
675 png_ptr->transformations |= PNG_USER_TRANSFORM;
676 png_ptr->read_user_transform_fn = read_user_transform_fn;
680 png_warning(png_ptr,
690 png_init_read_transformations(png_structp png_ptr)
694 if(png_ptr != NULL)
699 int color_type = png_ptr->color_type;
703 if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&
704 (png_ptr->transformations & PNG_EXPAND))
709 switch (png_ptr->bit_depth)
712 png_ptr->background.gray *= (png_uint_16)0xff;
713 png_ptr->background.red = png_ptr->background.green
714 = png_ptr->background.blue = png_ptr->background.gray;
717 png_ptr->background.gray *= (png_uint_16)0x55;
718 png_ptr->background.red = png_ptr->background.green
719 = png_ptr->background.blue = png_ptr->background.gray;
722 png_ptr->background.gray *= (png_uint_16)0x11;
723 png_ptr->background.red = png_ptr->background.green
724 = png_ptr->background.blue = png_ptr->background.gray;
728 png_ptr->background.red = png_ptr->background.green
729 = png_ptr->background.blue = png_ptr->background.gray;
735 png_ptr->background.red =
736 png_ptr->palette[png_ptr->background.index].red;
737 png_ptr->background.green =
738 png_ptr->palette[png_ptr->background.index].green;
739 png_ptr->background.blue =
740 png_ptr->palette[png_ptr->background.index].blue;
743 if (png_ptr->transformations & PNG_INVERT_ALPHA)
746 if (!(png_ptr->transformations & PNG_EXPAND))
752 istop=(int)png_ptr->num_trans;
754 png_ptr->trans[i] = (png_byte)(255 - png_ptr->trans[i]);
764 png_ptr->background_1 = png_ptr->background;
768 if ((color_type == PNG_COLOR_TYPE_PALETTE && png_ptr->num_trans != 0)
769 && (fabs(png_ptr->screen_gamma * png_ptr->gamma - 1.0)
774 for (i=0; i<png_ptr->num_trans; i++)
776 if (png_ptr->trans[i] != 0 && png_ptr->trans[i] != 0xff)
780 png_ptr->transformations &= (~PNG_GAMMA);
783 if (png_ptr->transformations & (PNG_GAMMA | PNG_RGB_TO_GRAY))
785 png_build_gamma_table(png_ptr);
787 if (png_ptr->transformations & PNG_BACKGROUND)
794 png_colorp palette = png_ptr->palette;
795 int num_palette = png_ptr->num_palette;
797 if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE)
799 back.red = png_ptr->gamma_table[png_ptr->background.red];
800 back.green = png_ptr->gamma_table[png_ptr->background.green];
801 back.blue = png_ptr->gamma_table[png_ptr->background.blue];
803 back_1.red = png_ptr->gamma_to_1[png_ptr->background.red];
804 back_1.green = png_ptr->gamma_to_1[png_ptr->background.green];
805 back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue];
811 switch (png_ptr->background_gamma_type)
814 g = (png_ptr->screen_gamma);
818 g = 1.0 / (png_ptr->gamma);
819 gs = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma);
822 g = 1.0 / (png_ptr->background_gamma);
823 gs = 1.0 / (png_ptr->background_gamma *
824 png_ptr->screen_gamma);
833 back.red = (png_byte)png_ptr->background.red;
834 back.green = (png_byte)png_ptr->background.green;
835 back.blue = (png_byte)png_ptr->background.blue;
840 (double)png_ptr->background.red/255, gs) * 255.0 + .5);
842 (double)png_ptr->background.green/255, gs) * 255.0 + .5);
844 (double)png_ptr->background.blue/255, gs) * 255.0 + .5);
848 (double)png_ptr->background.red/255, g) * 255.0 + .5);
850 (double)png_ptr->background.green/255, g) * 255.0 + .5);
852 (double)png_ptr->background.blue/255, g) * 255.0 + .5);
856 if (i < (int)png_ptr->num_trans && png_ptr->trans[i] != 0xff)
858 if (png_ptr->trans[i] == 0)
862 else /* if (png_ptr->trans[i] != 0xff) */
866 v = png_ptr->gamma_to_1[palette[i].red];
867 png_composite(w, v, png_ptr->trans[i], back_1.red);
868 palette[i].red = png_ptr->gamma_from_1[w];
870 v = png_ptr->gamma_to_1[palette[i].green];
871 png_composite(w, v, png_ptr->trans[i], back_1.green);
872 palette[i].green = png_ptr->gamma_from_1[w];
874 v = png_ptr->gamma_to_1[palette[i].blue];
875 png_composite(w, v, png_ptr->trans[i], back_1.blue);
876 palette[i].blue = png_ptr->gamma_from_1[w];
881 palette[i].red = png_ptr->gamma_table[palette[i].red];
882 palette[i].green = png_ptr->gamma_table[palette[i].green];
883 palette[i].blue = png_ptr->gamma_table[palette[i].blue];
887 /* if (png_ptr->background_gamma_type!=PNG_BACKGROUND_GAMMA_UNKNOWN) */
891 double m = (double)(((png_uint_32)1 << png_ptr->bit_depth) - 1);
895 switch (png_ptr->background_gamma_type)
898 g = (png_ptr->screen_gamma);
902 g = 1.0 / (png_ptr->gamma);
903 gs = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma);
906 g = 1.0 / (png_ptr->background_gamma);
907 gs = 1.0 / (png_ptr->background_gamma *
908 png_ptr->screen_gamma);
912 png_ptr->background_1.gray = (png_uint_16)(pow(
913 (double)png_ptr->background.gray / m, g) * m + .5);
914 png_ptr->background.gray = (png_uint_16)(pow(
915 (double)png_ptr->background.gray / m, gs) * m + .5);
917 if ((png_ptr->background.red != png_ptr->background.green) ||
918 (png_ptr->background.red != png_ptr->background.blue) ||
919 (png_ptr->background.red != png_ptr->background.gray))
922 png_ptr->background_1.red = (png_uint_16)(pow(
923 (double)png_ptr->background.red / m, g) * m + .5);
924 png_ptr->background_1.green = (png_uint_16)(pow(
925 (double)png_ptr->background.green / m, g) * m + .5);
926 png_ptr->background_1.blue = (png_uint_16)(pow(
927 (double)png_ptr->background.blue / m, g) * m + .5);
928 png_ptr->background.red = (png_uint_16)(pow(
929 (double)png_ptr->background.red / m, gs) * m + .5);
930 png_ptr->background.green = (png_uint_16)(pow(
931 (double)png_ptr->background.green / m, gs) * m + .5);
932 png_ptr->background.blue = (png_uint_16)(pow(
933 (double)png_ptr->background.blue / m, gs) * m + .5);
938 png_ptr->background_1.red = png_ptr->background_1.green
939 = png_ptr->background_1.blue = png_ptr->background_1.gray;
940 png_ptr->background.red = png_ptr->background.green
941 = png_ptr->background.blue = png_ptr->background.gray;
950 png_colorp palette = png_ptr->palette;
951 int num_palette = png_ptr->num_palette;
956 palette[i].red = png_ptr->gamma_table[palette[i].red];
957 palette[i].green = png_ptr->gamma_table[palette[i].green];
958 palette[i].blue = png_ptr->gamma_table[palette[i].blue];
968 if ((png_ptr->transformations & PNG_BACKGROUND) &&
972 int istop = (int)png_ptr->num_trans;
974 png_colorp palette = png_ptr->palette;
976 back.red = (png_byte)png_ptr->background.red;
977 back.green = (png_byte)png_ptr->background.green;
978 back.blue = (png_byte)png_ptr->background.blue;
982 if (png_ptr->trans[i] == 0)
986 else if (png_ptr->trans[i] != 0xff)
990 png_ptr->trans[i], back.red);
992 png_ptr->trans[i], back.green);
994 png_ptr->trans[i], back.blue);
1001 if ((png_ptr->transformations & PNG_SHIFT) &&
1005 png_uint_16 istop = png_ptr->num_palette;
1006 int sr = 8 - png_ptr->sig_bit.red;
1007 int sg = 8 - png_ptr->sig_bit.green;
1008 int sb = 8 - png_ptr->sig_bit.blue;
1018 png_ptr->palette[i].red >>= sr;
1019 png_ptr->palette[i].green >>= sg;
1020 png_ptr->palette[i].blue >>= sb;
1027 if(png_ptr)
1037 png_read_transform_info(png_structp png_ptr, png_infop info_ptr)
1041 if (png_ptr->transformations & PNG_EXPAND)
1045 if (png_ptr->num_trans)
1054 if (png_ptr->num_trans)
1064 if (png_ptr->transformations & PNG_BACKGROUND)
1068 info_ptr->background = png_ptr->background;
1073 if (png_ptr->transformations & PNG_GAMMA)
1076 info_ptr->gamma = png_ptr->gamma;
1079 info_ptr->int_gamma = png_ptr->int_gamma;
1085 if ((png_ptr->transformations & PNG_16_TO_8) && (info_ptr->bit_depth == 16))
1090 if (png_ptr->transformations & PNG_DITHER)
1094 png_ptr->palette_lookup && info_ptr->bit_depth == 8)
1102 if ((png_ptr->transformations & PNG_PACK) && (info_ptr->bit_depth < 8))
1107 if (png_ptr->transformations & PNG_GRAY_TO_RGB)
1112 if (png_ptr->transformations & PNG_RGB_TO_GRAY)
1124 if (png_ptr->flags & PNG_FLAG_STRIP_ALPHA)
1133 if ((png_ptr->transformations & PNG_FILLER) &&
1140 if (png_ptr->transformations & PNG_ADD_ALPHA)
1148 if(png_ptr->transformations & PNG_USER_TRANSFORM)
1150 if(info_ptr->bit_depth < png_ptr->user_transform_depth)
1151 info_ptr->bit_depth = png_ptr->user_transform_depth;
1152 if(info_ptr->channels < png_ptr->user_transform_channels)
1153 info_ptr->channels = png_ptr->user_transform_channels;
1163 if(png_ptr)
1173 png_do_read_transformations(png_structp png_ptr)
1177 if (png_ptr->row_buf == NULL)
1182 sprintf(msg, "NULL row buffer for row %ld, pass %d", png_ptr->row_number,
1183 png_ptr->pass);
1184 png_error(png_ptr, msg);
1186 png_error(png_ptr, "NULL row buffer");
1192 if (png_ptr->transformations & PNG_EXPAND)
1194 if (png_ptr->row_info.color_type == PNG_COLOR_TYPE_PALETTE)
1196 png_do_expand_palette(&(png_ptr->row_info), png_ptr->row_buf + 1,
1197 png_ptr->palette, png_ptr->trans, png_ptr->num_trans);
1201 if (png_ptr->num_trans)
1202 png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1,
1203 &(png_ptr->trans_values));
1205 png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1,
1212 if (png_ptr->flags & PNG_FLAG_STRIP_ALPHA)
1213 png_do_strip_filler(&(png_ptr->row_info), png_ptr->row_buf + 1,
1214 PNG_FLAG_FILLER_AFTER | (png_ptr->flags & PNG_FLAG_STRIP_ALPHA));
1218 if (png_ptr->transformations & PNG_RGB_TO_GRAY)
1221 png_do_rgb_to_gray(png_ptr, &(png_ptr->row_info), png_ptr->row_buf + 1);
1224 png_ptr->rgb_to_gray_status=1;
1225 if(png_ptr->transformations == PNG_RGB_TO_GRAY_WARN)
1226 png_warning(png_ptr, "png_do_rgb_to_gray found nongray pixel");
1227 if(png_ptr->transformations == PNG_RGB_TO_GRAY_ERR)
1228 png_error(png_ptr, "png_do_rgb_to_gray found nongray pixel");
1266 if ((png_ptr->transformations & PNG_GRAY_TO_RGB) &&
1267 !(png_ptr->mode & PNG_BACKGROUND_IS_GRAY))
1268 png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1);
1272 if ((png_ptr->transformations & PNG_BACKGROUND) &&
1273 ((png_ptr->num_trans != 0 ) ||
1274 (png_ptr->color_type & PNG_COLOR_MASK_ALPHA)))
1275 png_do_background(&(png_ptr->row_info), png_ptr->row_buf + 1,
1276 &(png_ptr->trans_values), &(png_ptr->background)
1278 , &(png_ptr->background_1),
1279 png_ptr->gamma_table, png_ptr->gamma_from_1,
1280 png_ptr->gamma_to_1, png_ptr->gamma_16_table,
1281 png_ptr->gamma_16_from_1, png_ptr->gamma_16_to_1,
1282 png_ptr->gamma_shift
1288 if ((png_ptr->transformations & PNG_GAMMA) &&
1290 !((png_ptr->transformations & PNG_BACKGROUND) &&
1291 ((png_ptr->num_trans != 0) ||
1292 (png_ptr->color_type & PNG_COLOR_MASK_ALPHA))) &&
1294 (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE))
1295 png_do_gamma(&(png_ptr->row_info), png_ptr->row_buf + 1,
1296 png_ptr->gamma_table, png_ptr->gamma_16_table,
1297 png_ptr->gamma_shift);
1301 if (png_ptr->transformations & PNG_16_TO_8)
1302 png_do_chop(&(png_ptr->row_info), png_ptr->row_buf + 1);
1306 if (png_ptr->transformations & PNG_DITHER)
1308 png_do_dither((png_row_infop)&(png_ptr->row_info), png_ptr->row_buf + 1,
1309 png_ptr->palette_lookup, png_ptr->dither_index);
1310 if(png_ptr->row_info.rowbytes == (png_uint_32)0)
1311 png_error(png_ptr, "png_do_dither returned rowbytes=0");
1316 if (png_ptr->transformations & PNG_INVERT_MONO)
1317 png_do_invert(&(png_ptr->row_info), png_ptr->row_buf + 1);
1321 if (png_ptr->transformations & PNG_SHIFT)
1322 png_do_unshift(&(png_ptr->row_info), png_ptr->row_buf + 1,
1323 &(png_ptr->shift));
1327 if (png_ptr->transformations & PNG_PACK)
1328 png_do_unpack(&(png_ptr->row_info), png_ptr->row_buf + 1);
1332 if (png_ptr->transformations & PNG_BGR)
1333 png_do_bgr(&(png_ptr->row_info), png_ptr->row_buf + 1);
1337 if (png_ptr->transformations & PNG_PACKSWAP)
1338 png_do_packswap(&(png_ptr->row_info), png_ptr->row_buf + 1);
1343 if ((png_ptr->transformations & PNG_GRAY_TO_RGB) &&
1344 (png_ptr->mode & PNG_BACKGROUND_IS_GRAY))
1345 png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1);
1349 if (png_ptr->transformations & PNG_FILLER)
1350 png_do_read_filler(&(png_ptr->row_info), png_ptr->row_buf + 1,
1351 (png_uint_32)png_ptr->filler, png_ptr->flags);
1355 if (png_ptr->transformations & PNG_INVERT_ALPHA)
1356 png_do_read_invert_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1);
1360 if (png_ptr->transformations & PNG_SWAP_ALPHA)
1361 png_do_read_swap_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1);
1365 if (png_ptr->transformations & PNG_SWAP_BYTES)
1366 png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1);
1370 if (png_ptr->transformations & PNG_USER_TRANSFORM)
1372 if(png_ptr->read_user_transform_fn != NULL)
1373 (*(png_ptr->read_user_transform_fn)) /* user read transform function */
1374 (png_ptr, /* png_ptr */
1375 &(png_ptr->row_info), /* row_info: */
1382 png_ptr->row_buf + 1); /* start of pixel data for row */
1384 if(png_ptr->user_transform_depth)
1385 png_ptr->row_info.bit_depth = png_ptr->user_transform_depth;
1386 if(png_ptr->user_transform_channels)
1387 png_ptr->row_info.channels = png_ptr->user_transform_channels;
1389 png_ptr->row_info.pixel_depth = (png_byte)(png_ptr->row_info.bit_depth *
1390 png_ptr->row_info.channels);
1391 png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth,
1392 png_ptr->row_info.width);
2124 png_do_rgb_to_gray(png_structp png_ptr, png_row_infop row_info, png_bytep row)
2139 png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff;
2140 png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff;
2141 png_uint_32 bc = png_ptr->rgb_to_gray_blue_coeff;
2148 if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL)
2155 png_byte red = png_ptr->gamma_to_1[*(sp++)];
2156 png_byte green = png_ptr->gamma_to_1[*(sp++)];
2157 png_byte blue = png_ptr->gamma_to_1[*(sp++)];
2161 *(dp++) = png_ptr->gamma_from_1[
2192 if (png_ptr->gamma_16_to_1 != NULL &&
2193 png_ptr->gamma_16_from_1 != NULL)
2209 png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >>
2210 png_ptr->gamma_shift][red>>8];
2211 png_uint_16 green_1 = png_ptr->gamma_16_to_1[(green&0xff) >>
2212 png_ptr->gamma_shift][green>>8];
2213 png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >>
2214 png_ptr->gamma_shift][blue>>8];
2217 w = png_ptr->gamma_16_from_1[(gray16&0xff) >>
2218 png_ptr->gamma_shift][gray16 >> 8];
2253 if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL)
2259 png_byte red = png_ptr->gamma_to_1[*(sp++)];
2260 png_byte green = png_ptr->gamma_to_1[*(sp++)];
2261 png_byte blue = png_ptr->gamma_to_1[*(sp++)];
2264 *(dp++) = png_ptr->gamma_from_1
2289 if (png_ptr->gamma_16_to_1 != NULL &&
2290 png_ptr->gamma_16_from_1 != NULL)
2306 png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >>
2307 png_ptr->gamma_shift][red>>8];
2308 png_uint_16 green_1 = png_ptr->gamma_16_to_1[(green&0xff) >>
2309 png_ptr->gamma_shift][green>>8];
2310 png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >>
2311 png_ptr->gamma_shift][blue>>8];
2314 w = png_ptr->gamma_16_from_1[(gray16&0xff) >>
2315 png_ptr->gamma_shift][gray16 >> 8];
2409 png_correct_palette(png_structp png_ptr, png_colorp palette,
2415 if (png_ptr->transformations & (PNG_GAMMA | PNG_BACKGROUND))
2419 if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE)
2421 back.red = png_ptr->gamma_table[png_ptr->background.red];
2422 back.green = png_ptr->gamma_table[png_ptr->background.green];
2423 back.blue = png_ptr->gamma_table[png_ptr->background.blue];
2425 back_1.red = png_ptr->gamma_to_1[png_ptr->background.red];
2426 back_1.green = png_ptr->gamma_to_1[png_ptr->background.green];
2427 back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue];
2433 g = 1.0 / (png_ptr->background_gamma * png_ptr->screen_gamma);
2435 if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_SCREEN ||
2438 back.red = png_ptr->background.red;
2439 back.green = png_ptr->background.green;
2440 back.blue = png_ptr->background.blue;
2445 (png_byte)(pow((double)png_ptr->background.red/255, g) *
2448 (png_byte)(pow((double)png_ptr->background.green/255, g) *
2451 (png_byte)(pow((double)png_ptr->background.blue/255, g) *
2455 g = 1.0 / png_ptr->background_gamma;
2458 (png_byte)(pow((double)png_ptr->background.red/255, g) *
2461 (png_byte)(pow((double)png_ptr->background.green/255, g) *
2464 (png_byte)(pow((double)png_ptr->background.blue/255, g) *
2468 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
2474 if (i < png_ptr->num_trans && png_ptr->trans[i] == 0)
2478 else if (i < png_ptr->num_trans && png_ptr->trans[i] != 0xff)
2482 v = png_ptr->gamma_to_1[png_ptr->palette[i].red];
2483 png_composite(w, v, png_ptr->trans[i], back_1.red);
2484 palette[i].red = png_ptr->gamma_from_1[w];
2486 v = png_ptr->gamma_to_1[png_ptr->palette[i].green];
2487 png_composite(w, v, png_ptr->trans[i], back_1.green);
2488 palette[i].green = png_ptr->gamma_from_1[w];
2490 v = png_ptr->gamma_to_1[png_ptr->palette[i].blue];
2491 png_composite(w, v, png_ptr->trans[i], back_1.blue);
2492 palette[i].blue = png_ptr->gamma_from_1[w];
2496 palette[i].red = png_ptr->gamma_table[palette[i].red];
2497 palette[i].green = png_ptr->gamma_table[palette[i].green];
2498 palette[i].blue = png_ptr->gamma_table[palette[i].blue];
2508 if (palette[i].red == (png_byte)png_ptr->trans_values.gray)
2514 palette[i].red = png_ptr->gamma_table[palette[i].red];
2515 palette[i].green = png_ptr->gamma_table[palette[i].green];
2516 palette[i].blue = png_ptr->gamma_table[palette[i].blue];
2524 if (png_ptr->transformations & PNG_GAMMA)
2530 palette[i].red = png_ptr->gamma_table[palette[i].red];
2531 palette[i].green = png_ptr->gamma_table[palette[i].green];
2532 palette[i].blue = png_ptr->gamma_table[palette[i].blue];
2540 if (png_ptr->transformations & PNG_BACKGROUND)
2542 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
2546 back.red = (png_byte)png_ptr->background.red;
2547 back.green = (png_byte)png_ptr->background.green;
2548 back.blue = (png_byte)png_ptr->background.blue;
2550 for (i = 0; i < (int)png_ptr->num_trans; i++)
2552 if (png_ptr->trans[i] == 0)
2558 else if (png_ptr->trans[i] != 0xff)
2560 png_composite(palette[i].red, png_ptr->palette[i].red,
2561 png_ptr->trans[i], back.red);
2562 png_composite(palette[i].green, png_ptr->palette[i].green,
2563 png_ptr->trans[i], back.green);
2564 png_composite(palette[i].blue, png_ptr->palette[i].blue,
2565 png_ptr->trans[i], back.blue);
2575 if (i == (png_byte)png_ptr->trans_values.gray)
2577 palette[i].red = (png_byte)png_ptr->background.red;
2578 palette[i].green = (png_byte)png_ptr->background.green;
2579 palette[i].blue = (png_byte)png_ptr->background.blue;
3000 else /* if (png_ptr->bit_depth == 16) */
3906 png_build_gamma_table(png_structp png_ptr)
3909 if(png_ptr->gamma != 0.0)
3911 if (png_ptr->bit_depth <= 8)
3916 if (png_ptr->screen_gamma > .000001)
3917 g = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma);
3921 png_ptr->gamma_table = (png_bytep)png_malloc(png_ptr,
3926 png_ptr->gamma_table[i] = (png_byte)(pow((double)i / 255.0,
3932 if (png_ptr->transformations & ((PNG_BACKGROUND) | PNG_RGB_TO_GRAY))
3935 g = 1.0 / (png_ptr->gamma);
3937 png_ptr->gamma_to_1 = (png_bytep)png_malloc(png_ptr,
3942 png_ptr->gamma_to_1[i] = (png_byte)(pow((double)i / 255.0,
3947 png_ptr->gamma_from_1 = (png_bytep)png_malloc(png_ptr,
3950 if(png_ptr->screen_gamma > 0.000001)
3951 g = 1.0 / png_ptr->screen_gamma;
3953 g = png_ptr->gamma; /* probably doing rgb_to_gray */
3957 png_ptr->gamma_from_1[i] = (png_byte)(pow((double)i / 255.0,
3971 if (png_ptr->color_type & PNG_COLOR_MASK_COLOR)
3973 sig_bit = (int)png_ptr->sig_bit.red;
3974 if ((int)png_ptr->sig_bit.green > sig_bit)
3975 sig_bit = png_ptr->sig_bit.green;
3976 if ((int)png_ptr->sig_bit.blue > sig_bit)
3977 sig_bit = png_ptr->sig_bit.blue;
3981 sig_bit = (int)png_ptr->sig_bit.gray;
3989 if (png_ptr->transformations & PNG_16_TO_8)
4000 png_ptr->gamma_shift = (png_byte)shift;
4004 if (png_ptr->screen_gamma > .000001)
4005 g = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma);
4009 png_ptr->gamma_16_table = (png_uint_16pp)png_malloc(png_ptr,
4012 if (png_ptr->transformations & (PNG_16_TO_8 | PNG_BACKGROUND))
4019 png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr,
4032 png_ptr->gamma_16_table[(int)(last & (0xff >> shift))]
4040 png_ptr->gamma_16_table[(int)(last & (0xff >> shift))]
4049 png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr,
4055 png_ptr->gamma_16_table[i][j] =
4064 if (png_ptr->transformations & (PNG_BACKGROUND | PNG_RGB_TO_GRAY))
4067 g = 1.0 / (png_ptr->gamma);
4069 png_ptr->gamma_16_to_1 = (png_uint_16pp)png_malloc(png_ptr,
4074 png_ptr->gamma_16_to_1[i] = (png_uint_16p)png_malloc(png_ptr,
4081 png_ptr->gamma_16_to_1[i][j] =
4087 if(png_ptr->screen_gamma > 0.000001)
4088 g = 1.0 / png_ptr->screen_gamma;
4090 g = png_ptr->gamma; /* probably doing rgb_to_gray */
4092 png_ptr->gamma_16_from_1 = (png_uint_16pp)png_malloc(png_ptr,
4097 png_ptr->gamma_16_from_1[i] = (png_uint_16p)png_malloc(png_ptr,
4104 png_ptr->gamma_16_from_1[i][j] =