Changeset 846 for trunk/src/3rdparty/libpng/pngrtran.c
- Timestamp:
- May 5, 2011, 5:36:53 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.7.2 (added) merged: 845 /branches/vendor/nokia/qt/current merged: 844 /branches/vendor/nokia/qt/4.6.3 removed
- Property svn:mergeinfo changed
-
trunk/src/3rdparty/libpng/pngrtran.c
r561 r846 2 2 /* pngrtran.c - transforms the data in a row for PNG readers 3 3 * 4 * Last changed in libpng 1. 2.38 [July 16, 2009]5 * Copyright (c) 1998-20 09Glenn Randers-Pehrson4 * Last changed in libpng 1.4.0 [January 3, 2010] 5 * Copyright (c) 1998-2010 Glenn Randers-Pehrson 6 6 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) 7 7 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) … … 17 17 */ 18 18 19 #define PNG_ INTERNAL19 #define PNG_NO_PEDANTIC_WARNINGS 20 20 #include "png.h" 21 #if defined(PNG_READ_SUPPORTED) 21 #ifdef PNG_READ_SUPPORTED 22 #include "pngpriv.h" 22 23 23 24 /* Set the action on getting a CRC error for an ancillary or critical chunk. */ … … 26 27 { 27 28 png_debug(1, "in png_set_crc_action"); 28 /* Tell libpng how we react to CRC errors in critical chunks */29 29 30 if (png_ptr == NULL) 30 31 return; 32 33 /* Tell libpng how we react to CRC errors in critical chunks */ 31 34 switch (crit_action) 32 35 { … … 47 50 case PNG_CRC_WARN_DISCARD: /* Not a valid action for critical data */ 48 51 png_warning(png_ptr, 49 "Can't discard critical data on CRC error .");52 "Can't discard critical data on CRC error"); 50 53 case PNG_CRC_ERROR_QUIT: /* Error/quit */ 51 54 … … 56 59 } 57 60 61 /* Tell libpng how we react to CRC errors in ancillary chunks */ 58 62 switch (ancil_action) 59 63 { … … 95 99 { 96 100 png_debug(1, "in png_set_background"); 101 97 102 if (png_ptr == NULL) 98 103 return; … … 112 117 #endif 113 118 114 #if defined(PNG_READ_16_TO_8_SUPPORTED)119 #ifdef PNG_READ_16_TO_8_SUPPORTED 115 120 /* Strip 16 bit depth files to 8 bit depth */ 116 121 void PNGAPI … … 118 123 { 119 124 png_debug(1, "in png_set_strip_16"); 125 120 126 if (png_ptr == NULL) 121 127 return; … … 124 130 #endif 125 131 126 #if defined(PNG_READ_STRIP_ALPHA_SUPPORTED)132 #ifdef PNG_READ_STRIP_ALPHA_SUPPORTED 127 133 void PNGAPI 128 134 png_set_strip_alpha(png_structp png_ptr) 129 135 { 130 136 png_debug(1, "in png_set_strip_alpha"); 137 131 138 if (png_ptr == NULL) 132 139 return; … … 135 142 #endif 136 143 137 #if defined(PNG_READ_DITHER_SUPPORTED)144 #ifdef PNG_READ_DITHER_SUPPORTED 138 145 /* Dither file to 8 bit. Supply a palette, the current number 139 146 * of elements in the palette, the maximum number of elements … … 160 167 { 161 168 png_debug(1, "in png_set_dither"); 169 162 170 if (png_ptr == NULL) 163 171 return; … … 329 337 } 330 338 331 hash = (png_dsortpp)png_ malloc(png_ptr, (png_uint_32)(769 *339 hash = (png_dsortpp)png_calloc(png_ptr, (png_uint_32)(769 * 332 340 png_sizeof(png_dsortp))); 333 png_memset(hash, 0, 769 * png_sizeof(png_dsortp));334 341 335 342 num_new_palette = num_palette; … … 477 484 int num_blue = (1 << PNG_DITHER_BLUE_BITS); 478 485 png_size_t num_entries = ((png_size_t)1 << total_bits); 479 png_ptr->palette_lookup = (png_bytep )png_malloc(png_ptr, 486 487 png_ptr->palette_lookup = (png_bytep )png_calloc(png_ptr, 480 488 (png_uint_32)(num_entries * png_sizeof(png_byte))); 481 png_memset(png_ptr->palette_lookup, 0, num_entries *482 png_sizeof(png_byte));483 489 484 490 distance = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_entries * 485 491 png_sizeof(png_byte))); 486 487 492 png_memset(distance, 0xff, num_entries * png_sizeof(png_byte)); 488 493 … … 545 550 { 546 551 png_debug(1, "in png_set_gamma"); 552 547 553 if (png_ptr == NULL) 548 554 return; 555 549 556 if ((fabs(scrn_gamma * file_gamma - 1.0) > PNG_GAMMA_THRESHOLD) || 550 557 (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) || … … 556 563 #endif 557 564 558 #if defined(PNG_READ_EXPAND_SUPPORTED)565 #ifdef PNG_READ_EXPAND_SUPPORTED 559 566 /* Expand paletted images to RGB, expand grayscale images of 560 567 * less than 8-bit depth to 8-bit depth, and expand tRNS chunks … … 565 572 { 566 573 png_debug(1, "in png_set_expand"); 574 567 575 if (png_ptr == NULL) 568 576 return; 577 569 578 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS); 570 579 png_ptr->flags &= ~PNG_FLAG_ROW_INIT; … … 584 593 * doing, whereas "expand" can (and does) mean any number of things. 585 594 * 586 * GRP 20060307: In libpng-1.4.0, png_set_gray_1_2_4_to_8() was modified 587 * to expand only the sample depth but not to expand the tRNS to alpha. 595 * GRP 20060307: In libpng-1.2.9, png_set_gray_1_2_4_to_8() was modified 596 * to expand only the sample depth but not to expand the tRNS to alpha 597 * and its name was changed to png_set_expand_gray_1_2_4_to_8(). 588 598 */ 589 599 … … 593 603 { 594 604 png_debug(1, "in png_set_palette_to_rgb"); 605 595 606 if (png_ptr == NULL) 596 607 return; 608 597 609 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS); 598 610 png_ptr->flags &= ~PNG_FLAG_ROW_INIT; 599 611 } 600 612 601 #if !defined(PNG_1_0_X)602 613 /* Expand grayscale images of less than 8-bit depth to 8 bits. */ 603 614 void PNGAPI … … 605 616 { 606 617 png_debug(1, "in png_set_expand_gray_1_2_4_to_8"); 618 607 619 if (png_ptr == NULL) 608 620 return; 621 609 622 png_ptr->transformations |= PNG_EXPAND; 610 623 png_ptr->flags &= ~PNG_FLAG_ROW_INIT; 611 624 } 612 #endif 613 614 #if defined(PNG_1_0_X) || defined(PNG_1_2_X) 615 /* Expand grayscale images of less than 8-bit depth to 8 bits. */ 616 /* Deprecated as of libpng-1.2.9 */ 617 void PNGAPI 618 png_set_gray_1_2_4_to_8(png_structp png_ptr) 619 { 620 png_debug(1, "in png_set_gray_1_2_4_to_8"); 621 if (png_ptr == NULL) 622 return; 623 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS); 624 } 625 #endif 625 626 626 627 627 … … 631 631 { 632 632 png_debug(1, "in png_set_tRNS_to_alpha"); 633 633 634 png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS); 634 635 png_ptr->flags &= ~PNG_FLAG_ROW_INIT; … … 636 637 #endif /* defined(PNG_READ_EXPAND_SUPPORTED) */ 637 638 638 #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)639 #ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED 639 640 void PNGAPI 640 641 png_set_gray_to_rgb(png_structp png_ptr) 641 642 { 642 643 png_debug(1, "in png_set_gray_to_rgb"); 644 643 645 png_ptr->transformations |= PNG_GRAY_TO_RGB; 644 646 png_ptr->flags &= ~PNG_FLAG_ROW_INIT; … … 646 648 #endif 647 649 648 #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)649 #if defined(PNG_FLOATING_POINT_SUPPORTED)650 #ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED 651 #ifdef PNG_FLOATING_POINT_SUPPORTED 650 652 /* Convert a RGB image to a grayscale of the same width. This allows us, 651 653 * for example, to convert a 24 bpp RGB image into an 8 bpp grayscale image. … … 669 671 { 670 672 png_debug(1, "in png_set_rgb_to_gray"); 673 671 674 if (png_ptr == NULL) 672 675 return; 676 673 677 switch(error_action) 674 678 { … … 682 686 } 683 687 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) 684 #if defined(PNG_READ_EXPAND_SUPPORTED)688 #ifdef PNG_READ_EXPAND_SUPPORTED 685 689 png_ptr->transformations |= PNG_EXPAND; 686 690 #else 687 691 { 688 692 png_warning(png_ptr, 689 "Cannot do RGB_TO_GRAY without EXPAND_SUPPORTED .");693 "Cannot do RGB_TO_GRAY without EXPAND_SUPPORTED"); 690 694 png_ptr->transformations &= ~PNG_RGB_TO_GRAY; 691 695 } … … 718 722 719 723 #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ 720 defined(PNG_LEGACY_SUPPORTED) || \721 724 defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) 722 725 void PNGAPI … … 725 728 { 726 729 png_debug(1, "in png_set_read_user_transform_fn"); 730 727 731 if (png_ptr == NULL) 728 732 return; 729 #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) 733 734 #ifdef PNG_READ_USER_TRANSFORM_SUPPORTED 730 735 png_ptr->transformations |= PNG_USER_TRANSFORM; 731 736 png_ptr->read_user_transform_fn = read_user_transform_fn; 732 #endif733 #ifdef PNG_LEGACY_SUPPORTED734 if (read_user_transform_fn)735 png_warning(png_ptr,736 "This version of libpng does not support user transforms");737 737 #endif 738 738 } … … 746 746 { 747 747 png_debug(1, "in png_init_read_transformations"); 748 #if defined(PNG_USELESS_TESTS_SUPPORTED) 749 if (png_ptr != NULL) 750 #endif 748 751 749 { 752 750 #if defined(PNG_READ_BACKGROUND_SUPPORTED) || defined(PNG_READ_SHIFT_SUPPORTED) \ … … 757 755 #if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED) 758 756 759 #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)757 #ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED 760 758 /* Detect gray background and attempt to enable optimization 761 759 * for gray --> RGB case … … 797 795 if (!(png_ptr->transformations & PNG_EXPAND_tRNS)) 798 796 { 799 png_ptr->trans_ values.gray *= (png_uint_16)0xff;800 png_ptr->trans_ values.red = png_ptr->trans_values.green801 = png_ptr->trans_ values.blue = png_ptr->trans_values.gray;797 png_ptr->trans_color.gray *= (png_uint_16)0xff; 798 png_ptr->trans_color.red = png_ptr->trans_color.green 799 = png_ptr->trans_color.blue = png_ptr->trans_color.gray; 802 800 } 803 801 break; … … 809 807 if (!(png_ptr->transformations & PNG_EXPAND_tRNS)) 810 808 { 811 png_ptr->trans_ values.gray *= (png_uint_16)0x55;812 png_ptr->trans_ values.red = png_ptr->trans_values.green813 = png_ptr->trans_ values.blue = png_ptr->trans_values.gray;809 png_ptr->trans_color.gray *= (png_uint_16)0x55; 810 png_ptr->trans_color.red = png_ptr->trans_color.green 811 = png_ptr->trans_color.blue = png_ptr->trans_color.gray; 814 812 } 815 813 break; … … 821 819 if (!(png_ptr->transformations & PNG_EXPAND_tRNS)) 822 820 { 823 png_ptr->trans_ values.gray *= (png_uint_16)0x11;824 png_ptr->trans_ values.red = png_ptr->trans_values.green825 = png_ptr->trans_ values.blue = png_ptr->trans_values.gray;821 png_ptr->trans_color.gray *= (png_uint_16)0x11; 822 png_ptr->trans_color.red = png_ptr->trans_color.green 823 = png_ptr->trans_color.blue = png_ptr->trans_color.gray; 826 824 } 827 825 break; … … 844 842 png_ptr->palette[png_ptr->background.index].blue; 845 843 846 #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED)844 #ifdef PNG_READ_INVERT_ALPHA_SUPPORTED 847 845 if (png_ptr->transformations & PNG_INVERT_ALPHA) 848 846 { 849 #if defined(PNG_READ_EXPAND_SUPPORTED)847 #ifdef PNG_READ_EXPAND_SUPPORTED 850 848 if (!(png_ptr->transformations & PNG_EXPAND_tRNS)) 851 849 #endif … … 857 855 istop=(int)png_ptr->num_trans; 858 856 for (i=0; i<istop; i++) 859 png_ptr->trans [i] = (png_byte)(255 - png_ptr->trans[i]);857 png_ptr->trans_alpha[i] = (png_byte)(255 - png_ptr->trans_alpha[i]); 860 858 } 861 859 } … … 879 877 for (i=0; i<png_ptr->num_trans; i++) 880 878 { 881 if (png_ptr->trans [i] != 0 && png_ptr->trans[i] != 0xff)879 if (png_ptr->trans_alpha[i] != 0 && png_ptr->trans_alpha[i] != 0xff) 882 880 k=1; /* Partial transparency is present */ 883 881 } … … 889 887 png_ptr->gamma != 0.0) 890 888 { 891 png_build_gamma_table(png_ptr); 892 #if defined(PNG_READ_BACKGROUND_SUPPORTED) 889 png_build_gamma_table(png_ptr, png_ptr->bit_depth); 890 891 #ifdef PNG_READ_BACKGROUND_SUPPORTED 893 892 if (png_ptr->transformations & PNG_BACKGROUND) 894 893 { … … 945 944 { 946 945 back.red = (png_byte)(pow( 947 (double)png_ptr->background.red/255 , gs) * 255.0 + .5);946 (double)png_ptr->background.red/255.0, gs) * 255.0 + .5); 948 947 back.green = (png_byte)(pow( 949 (double)png_ptr->background.green/255 , gs) * 255.0 + .5);948 (double)png_ptr->background.green/255.0, gs) * 255.0 + .5); 950 949 back.blue = (png_byte)(pow( 951 (double)png_ptr->background.blue/255 , gs) * 255.0 + .5);950 (double)png_ptr->background.blue/255.0, gs) * 255.0 + .5); 952 951 } 953 952 954 953 back_1.red = (png_byte)(pow( 955 (double)png_ptr->background.red/255 , g) * 255.0 + .5);954 (double)png_ptr->background.red/255.0, g) * 255.0 + .5); 956 955 back_1.green = (png_byte)(pow( 957 (double)png_ptr->background.green/255 , g) * 255.0 + .5);956 (double)png_ptr->background.green/255.0, g) * 255.0 + .5); 958 957 back_1.blue = (png_byte)(pow( 959 (double)png_ptr->background.blue/255 , g) * 255.0 + .5);958 (double)png_ptr->background.blue/255.0, g) * 255.0 + .5); 960 959 } 961 960 for (i = 0; i < num_palette; i++) 962 961 { 963 if (i < (int)png_ptr->num_trans && png_ptr->trans [i] != 0xff)964 { 965 if (png_ptr->trans [i] == 0)962 if (i < (int)png_ptr->num_trans && png_ptr->trans_alpha[i] != 0xff) 963 { 964 if (png_ptr->trans_alpha[i] == 0) 966 965 { 967 966 palette[i] = back; 968 967 } 969 else /* if (png_ptr->trans [i] != 0xff) */968 else /* if (png_ptr->trans_alpha[i] != 0xff) */ 970 969 { 971 970 png_byte v, w; 972 971 973 972 v = png_ptr->gamma_to_1[palette[i].red]; 974 png_composite(w, v, png_ptr->trans [i], back_1.red);973 png_composite(w, v, png_ptr->trans_alpha[i], back_1.red); 975 974 palette[i].red = png_ptr->gamma_from_1[w]; 976 975 977 976 v = png_ptr->gamma_to_1[palette[i].green]; 978 png_composite(w, v, png_ptr->trans [i], back_1.green);977 png_composite(w, v, png_ptr->trans_alpha[i], back_1.green); 979 978 palette[i].green = png_ptr->gamma_from_1[w]; 980 979 981 980 v = png_ptr->gamma_to_1[palette[i].blue]; 982 png_composite(w, v, png_ptr->trans [i], back_1.blue);981 png_composite(w, v, png_ptr->trans_alpha[i], back_1.blue); 983 982 palette[i].blue = png_ptr->gamma_from_1[w]; 984 983 } … … 991 990 } 992 991 } 993 994 995 996 997 998 999 1000 992 /* Prevent the transformations being done again, and make sure 993 * that the now spurious alpha channel is stripped - the code 994 * has just reduced background composition and gamma correction 995 * to a simple alpha channel strip. 996 */ 997 png_ptr->transformations &= ~PNG_BACKGROUND; 998 png_ptr->transformations &= ~PNG_GAMMA; 999 png_ptr->transformations |= PNG_STRIP_ALPHA; 1001 1000 } 1002 1001 /* if (png_ptr->background_gamma_type!=PNG_BACKGROUND_GAMMA_UNKNOWN) */ … … 1076 1075 } 1077 1076 1078 1079 1077 /* Done the gamma correction. */ 1078 png_ptr->transformations &= ~PNG_GAMMA; 1080 1079 } 1081 1080 } 1082 #if defined(PNG_READ_BACKGROUND_SUPPORTED)1081 #ifdef PNG_READ_BACKGROUND_SUPPORTED 1083 1082 else 1084 1083 #endif 1085 1084 #endif /* PNG_READ_GAMMA_SUPPORTED && PNG_FLOATING_POINT_SUPPORTED */ 1086 #if defined(PNG_READ_BACKGROUND_SUPPORTED)1085 #ifdef PNG_READ_BACKGROUND_SUPPORTED 1087 1086 /* No GAMMA transformation */ 1088 1087 if ((png_ptr->transformations & PNG_BACKGROUND) && … … 1100 1099 for (i = 0; i < istop; i++) 1101 1100 { 1102 if (png_ptr->trans [i] == 0)1101 if (png_ptr->trans_alpha[i] == 0) 1103 1102 { 1104 1103 palette[i] = back; 1105 1104 } 1106 else if (png_ptr->trans [i] != 0xff)1105 else if (png_ptr->trans_alpha[i] != 0xff) 1107 1106 { 1108 1107 /* The png_composite() macro is defined in png.h */ 1109 1108 png_composite(palette[i].red, palette[i].red, 1110 png_ptr->trans [i], back.red);1109 png_ptr->trans_alpha[i], back.red); 1111 1110 png_composite(palette[i].green, palette[i].green, 1112 png_ptr->trans [i], back.green);1111 png_ptr->trans_alpha[i], back.green); 1113 1112 png_composite(palette[i].blue, palette[i].blue, 1114 png_ptr->trans [i], back.blue);1113 png_ptr->trans_alpha[i], back.blue); 1115 1114 } 1116 1115 } … … 1122 1121 #endif /* PNG_READ_BACKGROUND_SUPPORTED */ 1123 1122 1124 #if defined(PNG_READ_SHIFT_SUPPORTED)1123 #ifdef PNG_READ_SHIFT_SUPPORTED 1125 1124 if ((png_ptr->transformations & PNG_SHIFT) && 1126 1125 (color_type == PNG_COLOR_TYPE_PALETTE)) … … 1162 1161 { 1163 1162 png_debug(1, "in png_read_transform_info"); 1164 #if defined(PNG_READ_EXPAND_SUPPORTED) 1163 1164 #ifdef PNG_READ_EXPAND_SUPPORTED 1165 1165 if (png_ptr->transformations & PNG_EXPAND) 1166 1166 { … … 1189 1189 #endif 1190 1190 1191 #if defined(PNG_READ_BACKGROUND_SUPPORTED)1191 #ifdef PNG_READ_BACKGROUND_SUPPORTED 1192 1192 if (png_ptr->transformations & PNG_BACKGROUND) 1193 1193 { … … 1198 1198 #endif 1199 1199 1200 #if defined(PNG_READ_GAMMA_SUPPORTED)1200 #ifdef PNG_READ_GAMMA_SUPPORTED 1201 1201 if (png_ptr->transformations & PNG_GAMMA) 1202 1202 { … … 1210 1210 #endif 1211 1211 1212 #if defined(PNG_READ_16_TO_8_SUPPORTED)1212 #ifdef PNG_READ_16_TO_8_SUPPORTED 1213 1213 if ((png_ptr->transformations & PNG_16_TO_8) && (info_ptr->bit_depth == 16)) 1214 1214 info_ptr->bit_depth = 8; 1215 1215 #endif 1216 1216 1217 #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)1217 #ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED 1218 1218 if (png_ptr->transformations & PNG_GRAY_TO_RGB) 1219 1219 info_ptr->color_type |= PNG_COLOR_MASK_COLOR; 1220 1220 #endif 1221 1221 1222 #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)1222 #ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED 1223 1223 if (png_ptr->transformations & PNG_RGB_TO_GRAY) 1224 1224 info_ptr->color_type &= ~PNG_COLOR_MASK_COLOR; 1225 1225 #endif 1226 1226 1227 #if defined(PNG_READ_DITHER_SUPPORTED)1227 #ifdef PNG_READ_DITHER_SUPPORTED 1228 1228 if (png_ptr->transformations & PNG_DITHER) 1229 1229 { … … 1237 1237 #endif 1238 1238 1239 #if defined(PNG_READ_PACK_SUPPORTED)1239 #ifdef PNG_READ_PACK_SUPPORTED 1240 1240 if ((png_ptr->transformations & PNG_PACK) && (info_ptr->bit_depth < 8)) 1241 1241 info_ptr->bit_depth = 8; … … 1249 1249 info_ptr->channels = 1; 1250 1250 1251 #if defined(PNG_READ_STRIP_ALPHA_SUPPORTED)1251 #ifdef PNG_READ_STRIP_ALPHA_SUPPORTED 1252 1252 if (png_ptr->flags & PNG_FLAG_STRIP_ALPHA) 1253 1253 info_ptr->color_type &= ~PNG_COLOR_MASK_ALPHA; … … 1257 1257 info_ptr->channels++; 1258 1258 1259 #if defined(PNG_READ_FILLER_SUPPORTED)1259 #ifdef PNG_READ_FILLER_SUPPORTED 1260 1260 /* STRIP_ALPHA and FILLER allowed: MASK_ALPHA bit stripped above */ 1261 1261 if ((png_ptr->transformations & PNG_FILLER) && … … 1265 1265 info_ptr->channels++; 1266 1266 /* If adding a true alpha channel not just filler */ 1267 #if !defined(PNG_1_0_X)1268 1267 if (png_ptr->transformations & PNG_ADD_ALPHA) 1269 1268 info_ptr->color_type |= PNG_COLOR_MASK_ALPHA; 1270 #endif1271 1269 } 1272 1270 #endif … … 1288 1286 info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth, info_ptr->width); 1289 1287 1290 #if !defined(PNG_READ_EXPAND_SUPPORTED)1288 #ifndef PNG_READ_EXPAND_SUPPORTED 1291 1289 if (png_ptr) 1292 1290 return; … … 1302 1300 { 1303 1301 png_debug(1, "in png_do_read_transformations"); 1302 1304 1303 if (png_ptr->row_buf == NULL) 1305 1304 { 1306 #if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE)1305 #ifdef PNG_STDIO_SUPPORTED 1307 1306 char msg[50]; 1308 1307 … … 1328 1327 #endif 1329 1328 1330 #if defined(PNG_READ_EXPAND_SUPPORTED)1329 #ifdef PNG_READ_EXPAND_SUPPORTED 1331 1330 if (png_ptr->transformations & PNG_EXPAND) 1332 1331 { … … 1334 1333 { 1335 1334 png_do_expand_palette(&(png_ptr->row_info), png_ptr->row_buf + 1, 1336 png_ptr->palette, png_ptr->trans , png_ptr->num_trans);1335 png_ptr->palette, png_ptr->trans_alpha, png_ptr->num_trans); 1337 1336 } 1338 1337 else … … 1341 1340 (png_ptr->transformations & PNG_EXPAND_tRNS)) 1342 1341 png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1, 1343 &(png_ptr->trans_ values));1342 &(png_ptr->trans_color)); 1344 1343 else 1345 1344 png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1, … … 1349 1348 #endif 1350 1349 1351 #if defined(PNG_READ_STRIP_ALPHA_SUPPORTED)1350 #ifdef PNG_READ_STRIP_ALPHA_SUPPORTED 1352 1351 if (png_ptr->flags & PNG_FLAG_STRIP_ALPHA) 1353 1352 png_do_strip_filler(&(png_ptr->row_info), png_ptr->row_buf + 1, … … 1355 1354 #endif 1356 1355 1357 #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)1356 #ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED 1358 1357 if (png_ptr->transformations & PNG_RGB_TO_GRAY) 1359 1358 { … … 1404 1403 */ 1405 1404 1406 #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)1405 #ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED 1407 1406 /* If gray -> RGB, do so now only if background is non-gray; else do later 1408 1407 * for performance reasons … … 1413 1412 #endif 1414 1413 1415 #if defined(PNG_READ_BACKGROUND_SUPPORTED)1414 #ifdef PNG_READ_BACKGROUND_SUPPORTED 1416 1415 if ((png_ptr->transformations & PNG_BACKGROUND) && 1417 1416 ((png_ptr->num_trans != 0 ) || 1418 1417 (png_ptr->color_type & PNG_COLOR_MASK_ALPHA))) 1419 1418 png_do_background(&(png_ptr->row_info), png_ptr->row_buf + 1, 1420 &(png_ptr->trans_ values), &(png_ptr->background)1421 #if defined(PNG_READ_GAMMA_SUPPORTED)1419 &(png_ptr->trans_color), &(png_ptr->background) 1420 #ifdef PNG_READ_GAMMA_SUPPORTED 1422 1421 , &(png_ptr->background_1), 1423 1422 png_ptr->gamma_table, png_ptr->gamma_from_1, … … 1429 1428 #endif 1430 1429 1431 #if defined(PNG_READ_GAMMA_SUPPORTED)1430 #ifdef PNG_READ_GAMMA_SUPPORTED 1432 1431 if ((png_ptr->transformations & PNG_GAMMA) && 1433 #if defined(PNG_READ_BACKGROUND_SUPPORTED)1432 #ifdef PNG_READ_BACKGROUND_SUPPORTED 1434 1433 !((png_ptr->transformations & PNG_BACKGROUND) && 1435 1434 ((png_ptr->num_trans != 0) || … … 1442 1441 #endif 1443 1442 1444 #if defined(PNG_READ_16_TO_8_SUPPORTED)1443 #ifdef PNG_READ_16_TO_8_SUPPORTED 1445 1444 if (png_ptr->transformations & PNG_16_TO_8) 1446 1445 png_do_chop(&(png_ptr->row_info), png_ptr->row_buf + 1); 1447 1446 #endif 1448 1447 1449 #if defined(PNG_READ_DITHER_SUPPORTED)1448 #ifdef PNG_READ_DITHER_SUPPORTED 1450 1449 if (png_ptr->transformations & PNG_DITHER) 1451 1450 { … … 1457 1456 #endif 1458 1457 1459 #if defined(PNG_READ_INVERT_SUPPORTED)1458 #ifdef PNG_READ_INVERT_SUPPORTED 1460 1459 if (png_ptr->transformations & PNG_INVERT_MONO) 1461 1460 png_do_invert(&(png_ptr->row_info), png_ptr->row_buf + 1); 1462 1461 #endif 1463 1462 1464 #if defined(PNG_READ_SHIFT_SUPPORTED)1463 #ifdef PNG_READ_SHIFT_SUPPORTED 1465 1464 if (png_ptr->transformations & PNG_SHIFT) 1466 1465 png_do_unshift(&(png_ptr->row_info), png_ptr->row_buf + 1, … … 1468 1467 #endif 1469 1468 1470 #if defined(PNG_READ_PACK_SUPPORTED)1469 #ifdef PNG_READ_PACK_SUPPORTED 1471 1470 if (png_ptr->transformations & PNG_PACK) 1472 1471 png_do_unpack(&(png_ptr->row_info), png_ptr->row_buf + 1); 1473 1472 #endif 1474 1473 1475 #if defined(PNG_READ_BGR_SUPPORTED)1474 #ifdef PNG_READ_BGR_SUPPORTED 1476 1475 if (png_ptr->transformations & PNG_BGR) 1477 1476 png_do_bgr(&(png_ptr->row_info), png_ptr->row_buf + 1); 1478 1477 #endif 1479 1478 1480 #if defined(PNG_READ_PACKSWAP_SUPPORTED)1479 #ifdef PNG_READ_PACKSWAP_SUPPORTED 1481 1480 if (png_ptr->transformations & PNG_PACKSWAP) 1482 1481 png_do_packswap(&(png_ptr->row_info), png_ptr->row_buf + 1); 1483 1482 #endif 1484 1483 1485 #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)1484 #ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED 1486 1485 /* If gray -> RGB, do so now only if we did not do so above */ 1487 1486 if ((png_ptr->transformations & PNG_GRAY_TO_RGB) && … … 1490 1489 #endif 1491 1490 1492 #if defined(PNG_READ_FILLER_SUPPORTED)1491 #ifdef PNG_READ_FILLER_SUPPORTED 1493 1492 if (png_ptr->transformations & PNG_FILLER) 1494 1493 png_do_read_filler(&(png_ptr->row_info), png_ptr->row_buf + 1, … … 1496 1495 #endif 1497 1496 1498 #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED)1497 #ifdef PNG_READ_INVERT_ALPHA_SUPPORTED 1499 1498 if (png_ptr->transformations & PNG_INVERT_ALPHA) 1500 1499 png_do_read_invert_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1); 1501 1500 #endif 1502 1501 1503 #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED)1502 #ifdef PNG_READ_SWAP_ALPHA_SUPPORTED 1504 1503 if (png_ptr->transformations & PNG_SWAP_ALPHA) 1505 1504 png_do_read_swap_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1); 1506 1505 #endif 1507 1506 1508 #if defined(PNG_READ_SWAP_SUPPORTED)1507 #ifdef PNG_READ_SWAP_SUPPORTED 1509 1508 if (png_ptr->transformations & PNG_SWAP_BYTES) 1510 1509 png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1); 1511 1510 #endif 1512 1511 1513 #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)1512 #ifdef PNG_READ_USER_TRANSFORM_SUPPORTED 1514 1513 if (png_ptr->transformations & PNG_USER_TRANSFORM) 1515 1514 { … … 1525 1524 /* png_byte pixel_depth; bits per pixel (depth*channels) */ 1526 1525 png_ptr->row_buf + 1); /* start of pixel data for row */ 1527 #if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)1526 #ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED 1528 1527 if (png_ptr->user_transform_depth) 1529 1528 png_ptr->row_info.bit_depth = png_ptr->user_transform_depth; … … 1540 1539 } 1541 1540 1542 #if defined(PNG_READ_PACK_SUPPORTED)1541 #ifdef PNG_READ_PACK_SUPPORTED 1543 1542 /* Unpack pixels of 1, 2, or 4 bits per pixel into 1 byte per pixel, 1544 1543 * without changing the actual values. Thus, if you had a row with … … 1551 1550 { 1552 1551 png_debug(1, "in png_do_unpack"); 1553 #if defined(PNG_USELESS_TESTS_SUPPORTED) 1554 if (row != NULL && row_info != NULL && row_info->bit_depth < 8) 1555 #else 1552 1556 1553 if (row_info->bit_depth < 8) 1557 #endif1558 1554 { 1559 1555 png_uint_32 i; … … 1633 1629 #endif 1634 1630 1635 #if defined(PNG_READ_SHIFT_SUPPORTED)1631 #ifdef PNG_READ_SHIFT_SUPPORTED 1636 1632 /* Reverse the effects of png_do_shift. This routine merely shifts the 1637 1633 * pixels back to their significant bits values. Thus, if you have … … 1643 1639 { 1644 1640 png_debug(1, "in png_do_unshift"); 1641 1645 1642 if ( 1646 #if defined(PNG_USELESS_TESTS_SUPPORTED)1647 row != NULL && row_info != NULL && sig_bits != NULL &&1648 #endif1649 1643 row_info->color_type != PNG_COLOR_TYPE_PALETTE) 1650 1644 { … … 1746 1740 #endif 1747 1741 1748 #if defined(PNG_READ_16_TO_8_SUPPORTED)1742 #ifdef PNG_READ_16_TO_8_SUPPORTED 1749 1743 /* Chop rows of bit depth 16 down to 8 */ 1750 1744 void /* PRIVATE */ … … 1752 1746 { 1753 1747 png_debug(1, "in png_do_chop"); 1754 #if defined(PNG_USELESS_TESTS_SUPPORTED) 1755 if (row != NULL && row_info != NULL && row_info->bit_depth == 16) 1756 #else 1748 1757 1749 if (row_info->bit_depth == 16) 1758 #endif1759 1750 { 1760 1751 png_bytep sp = row; … … 1765 1756 for (i = 0; i<istop; i++, sp += 2, dp++) 1766 1757 { 1767 #if defined(PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED)1758 #ifdef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED 1768 1759 /* This does a more accurate scaling of the 16-bit color 1769 1760 * value, rather than a simple low-byte truncation. … … 1804 1795 #endif 1805 1796 1806 #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED)1797 #ifdef PNG_READ_SWAP_ALPHA_SUPPORTED 1807 1798 void /* PRIVATE */ 1808 1799 png_do_read_swap_alpha(png_row_infop row_info, png_bytep row) 1809 1800 { 1810 1801 png_debug(1, "in png_do_read_swap_alpha"); 1811 #if defined(PNG_USELESS_TESTS_SUPPORTED) 1812 if (row != NULL && row_info != NULL) 1813 #endif 1802 1814 1803 { 1815 1804 png_uint_32 row_width = row_info->width; … … 1896 1885 #endif 1897 1886 1898 #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED)1887 #ifdef PNG_READ_INVERT_ALPHA_SUPPORTED 1899 1888 void /* PRIVATE */ 1900 1889 png_do_read_invert_alpha(png_row_infop row_info, png_bytep row) 1901 1890 { 1902 1891 png_debug(1, "in png_do_read_invert_alpha"); 1903 #if defined(PNG_USELESS_TESTS_SUPPORTED) 1904 if (row != NULL && row_info != NULL) 1905 #endif 1892 1906 1893 { 1907 1894 png_uint_32 row_width = row_info->width; … … 1994 1981 #endif 1995 1982 1996 #if defined(PNG_READ_FILLER_SUPPORTED)1983 #ifdef PNG_READ_FILLER_SUPPORTED 1997 1984 /* Add filler channel if we have RGB color */ 1998 1985 void /* PRIVATE */ … … 2007 1994 2008 1995 png_debug(1, "in png_do_read_filler"); 1996 2009 1997 if ( 2010 #if defined(PNG_USELESS_TESTS_SUPPORTED)2011 row != NULL && row_info != NULL &&2012 #endif2013 1998 row_info->color_type == PNG_COLOR_TYPE_GRAY) 2014 1999 { … … 2170 2155 #endif 2171 2156 2172 #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)2157 #ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED 2173 2158 /* Expand grayscale files to RGB, with or without alpha */ 2174 2159 void /* PRIVATE */ … … 2179 2164 2180 2165 png_debug(1, "in png_do_gray_to_rgb"); 2166 2181 2167 if (row_info->bit_depth >= 8 && 2182 #if defined(PNG_USELESS_TESTS_SUPPORTED)2183 row != NULL && row_info != NULL &&2184 #endif2185 2168 !(row_info->color_type & PNG_COLOR_MASK_COLOR)) 2186 2169 { … … 2253 2236 #endif 2254 2237 2255 #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)2238 #ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED 2256 2239 /* Reduce RGB files to grayscale, with or without alpha 2257 2240 * using the equation given in Poynton's ColorFAQ at … … 2285 2268 2286 2269 png_debug(1, "in png_do_rgb_to_gray"); 2270 2287 2271 if ( 2288 #if defined(PNG_USELESS_TESTS_SUPPORTED)2289 row != NULL && row_info != NULL &&2290 #endif2291 2272 (row_info->color_type & PNG_COLOR_MASK_COLOR)) 2292 2273 { … … 2523 2504 2524 2505 png_debug(1, "in png_do_build_grayscale_palette"); 2506 2525 2507 if (palette == NULL) 2526 2508 return; … … 2562 2544 } 2563 2545 2564 /* This function is currently unused. Do we really need it? */ 2565 #if defined(PNG_READ_DITHER_SUPPORTED) && defined(PNG_CORRECT_PALETTE_SUPPORTED) 2566 void /* PRIVATE */ 2567 png_correct_palette(png_structp png_ptr, png_colorp palette, 2568 int num_palette) 2569 { 2570 png_debug(1, "in png_correct_palette"); 2571 #if defined(PNG_READ_BACKGROUND_SUPPORTED) && \ 2572 defined(PNG_READ_GAMMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED) 2573 if (png_ptr->transformations & (PNG_GAMMA | PNG_BACKGROUND)) 2574 { 2575 png_color back, back_1; 2576 2577 if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE) 2578 { 2579 back.red = png_ptr->gamma_table[png_ptr->background.red]; 2580 back.green = png_ptr->gamma_table[png_ptr->background.green]; 2581 back.blue = png_ptr->gamma_table[png_ptr->background.blue]; 2582 2583 back_1.red = png_ptr->gamma_to_1[png_ptr->background.red]; 2584 back_1.green = png_ptr->gamma_to_1[png_ptr->background.green]; 2585 back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue]; 2586 } 2587 else 2588 { 2589 double g; 2590 2591 g = 1.0 / (png_ptr->background_gamma * png_ptr->screen_gamma); 2592 2593 if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_SCREEN || 2594 fabs(g - 1.0) < PNG_GAMMA_THRESHOLD) 2595 { 2596 back.red = png_ptr->background.red; 2597 back.green = png_ptr->background.green; 2598 back.blue = png_ptr->background.blue; 2599 } 2600 else 2601 { 2602 back.red = 2603 (png_byte)(pow((double)png_ptr->background.red/255, g) * 2604 255.0 + 0.5); 2605 back.green = 2606 (png_byte)(pow((double)png_ptr->background.green/255, g) * 2607 255.0 + 0.5); 2608 back.blue = 2609 (png_byte)(pow((double)png_ptr->background.blue/255, g) * 2610 255.0 + 0.5); 2611 } 2612 2613 g = 1.0 / png_ptr->background_gamma; 2614 2615 back_1.red = 2616 (png_byte)(pow((double)png_ptr->background.red/255, g) * 2617 255.0 + 0.5); 2618 back_1.green = 2619 (png_byte)(pow((double)png_ptr->background.green/255, g) * 2620 255.0 + 0.5); 2621 back_1.blue = 2622 (png_byte)(pow((double)png_ptr->background.blue/255, g) * 2623 255.0 + 0.5); 2624 } 2625 2626 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) 2627 { 2628 png_uint_32 i; 2629 2630 for (i = 0; i < (png_uint_32)num_palette; i++) 2631 { 2632 if (i < png_ptr->num_trans && png_ptr->trans[i] == 0) 2633 { 2634 palette[i] = back; 2635 } 2636 else if (i < png_ptr->num_trans && png_ptr->trans[i] != 0xff) 2637 { 2638 png_byte v, w; 2639 2640 v = png_ptr->gamma_to_1[png_ptr->palette[i].red]; 2641 png_composite(w, v, png_ptr->trans[i], back_1.red); 2642 palette[i].red = png_ptr->gamma_from_1[w]; 2643 2644 v = png_ptr->gamma_to_1[png_ptr->palette[i].green]; 2645 png_composite(w, v, png_ptr->trans[i], back_1.green); 2646 palette[i].green = png_ptr->gamma_from_1[w]; 2647 2648 v = png_ptr->gamma_to_1[png_ptr->palette[i].blue]; 2649 png_composite(w, v, png_ptr->trans[i], back_1.blue); 2650 palette[i].blue = png_ptr->gamma_from_1[w]; 2651 } 2652 else 2653 { 2654 palette[i].red = png_ptr->gamma_table[palette[i].red]; 2655 palette[i].green = png_ptr->gamma_table[palette[i].green]; 2656 palette[i].blue = png_ptr->gamma_table[palette[i].blue]; 2657 } 2658 } 2659 } 2660 else 2661 { 2662 int i; 2663 2664 for (i = 0; i < num_palette; i++) 2665 { 2666 if (palette[i].red == (png_byte)png_ptr->trans_values.gray) 2667 { 2668 palette[i] = back; 2669 } 2670 else 2671 { 2672 palette[i].red = png_ptr->gamma_table[palette[i].red]; 2673 palette[i].green = png_ptr->gamma_table[palette[i].green]; 2674 palette[i].blue = png_ptr->gamma_table[palette[i].blue]; 2675 } 2676 } 2677 } 2678 } 2679 else 2680 #endif 2681 #if defined(PNG_READ_GAMMA_SUPPORTED) 2682 if (png_ptr->transformations & PNG_GAMMA) 2683 { 2684 int i; 2685 2686 for (i = 0; i < num_palette; i++) 2687 { 2688 palette[i].red = png_ptr->gamma_table[palette[i].red]; 2689 palette[i].green = png_ptr->gamma_table[palette[i].green]; 2690 palette[i].blue = png_ptr->gamma_table[palette[i].blue]; 2691 } 2692 } 2693 #if defined(PNG_READ_BACKGROUND_SUPPORTED) 2694 else 2695 #endif 2696 #endif 2697 #if defined(PNG_READ_BACKGROUND_SUPPORTED) 2698 if (png_ptr->transformations & PNG_BACKGROUND) 2699 { 2700 if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) 2701 { 2702 png_color back; 2703 2704 back.red = (png_byte)png_ptr->background.red; 2705 back.green = (png_byte)png_ptr->background.green; 2706 back.blue = (png_byte)png_ptr->background.blue; 2707 2708 for (i = 0; i < (int)png_ptr->num_trans; i++) 2709 { 2710 if (png_ptr->trans[i] == 0) 2711 { 2712 palette[i].red = back.red; 2713 palette[i].green = back.green; 2714 palette[i].blue = back.blue; 2715 } 2716 else if (png_ptr->trans[i] != 0xff) 2717 { 2718 png_composite(palette[i].red, png_ptr->palette[i].red, 2719 png_ptr->trans[i], back.red); 2720 png_composite(palette[i].green, png_ptr->palette[i].green, 2721 png_ptr->trans[i], back.green); 2722 png_composite(palette[i].blue, png_ptr->palette[i].blue, 2723 png_ptr->trans[i], back.blue); 2724 } 2725 } 2726 } 2727 else /* Assume grayscale palette (what else could it be?) */ 2728 { 2729 int i; 2730 2731 for (i = 0; i < num_palette; i++) 2732 { 2733 if (i == (png_byte)png_ptr->trans_values.gray) 2734 { 2735 palette[i].red = (png_byte)png_ptr->background.red; 2736 palette[i].green = (png_byte)png_ptr->background.green; 2737 palette[i].blue = (png_byte)png_ptr->background.blue; 2738 } 2739 } 2740 } 2741 } 2742 #endif 2743 } 2744 #endif 2745 2746 #if defined(PNG_READ_BACKGROUND_SUPPORTED) 2546 2547 #ifdef PNG_READ_BACKGROUND_SUPPORTED 2747 2548 /* Replace any alpha or transparency with the supplied background color. 2748 2549 * "background" is already in the screen gamma, while "background_1" is … … 2751 2552 void /* PRIVATE */ 2752 2553 png_do_background(png_row_infop row_info, png_bytep row, 2753 png_color_16p trans_ values, png_color_16p background2754 #if defined(PNG_READ_GAMMA_SUPPORTED)2554 png_color_16p trans_color, png_color_16p background 2555 #ifdef PNG_READ_GAMMA_SUPPORTED 2755 2556 , png_color_16p background_1, 2756 2557 png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1, … … 2766 2567 2767 2568 png_debug(1, "in png_do_background"); 2569 2768 2570 if (background != NULL && 2769 #if defined(PNG_USELESS_TESTS_SUPPORTED)2770 row != NULL && row_info != NULL &&2771 #endif2772 2571 (!(row_info->color_type & PNG_COLOR_MASK_ALPHA) || 2773 (row_info->color_type != PNG_COLOR_TYPE_PALETTE && trans_ values)))2572 (row_info->color_type != PNG_COLOR_TYPE_PALETTE && trans_color))) 2774 2573 { 2775 2574 switch (row_info->color_type) … … 2786 2585 { 2787 2586 if ((png_uint_16)((*sp >> shift) & 0x01) 2788 == trans_ values->gray)2587 == trans_color->gray) 2789 2588 { 2790 2589 *sp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff); … … 2804 2603 case 2: 2805 2604 { 2806 #if defined(PNG_READ_GAMMA_SUPPORTED)2605 #ifdef PNG_READ_GAMMA_SUPPORTED 2807 2606 if (gamma_table != NULL) 2808 2607 { … … 2812 2611 { 2813 2612 if ((png_uint_16)((*sp >> shift) & 0x03) 2814 == trans_ values->gray)2613 == trans_color->gray) 2815 2614 { 2816 2615 *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff); … … 2842 2641 { 2843 2642 if ((png_uint_16)((*sp >> shift) & 0x03) 2844 == trans_ values->gray)2643 == trans_color->gray) 2845 2644 { 2846 2645 *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff); … … 2861 2660 case 4: 2862 2661 { 2863 #if defined(PNG_READ_GAMMA_SUPPORTED)2662 #ifdef PNG_READ_GAMMA_SUPPORTED 2864 2663 if (gamma_table != NULL) 2865 2664 { … … 2869 2668 { 2870 2669 if ((png_uint_16)((*sp >> shift) & 0x0f) 2871 == trans_ values->gray)2670 == trans_color->gray) 2872 2671 { 2873 2672 *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff); … … 2899 2698 { 2900 2699 if ((png_uint_16)((*sp >> shift) & 0x0f) 2901 == trans_ values->gray)2700 == trans_color->gray) 2902 2701 { 2903 2702 *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff); … … 2918 2717 case 8: 2919 2718 { 2920 #if defined(PNG_READ_GAMMA_SUPPORTED)2719 #ifdef PNG_READ_GAMMA_SUPPORTED 2921 2720 if (gamma_table != NULL) 2922 2721 { … … 2924 2723 for (i = 0; i < row_width; i++, sp++) 2925 2724 { 2926 if (*sp == trans_ values->gray)2725 if (*sp == trans_color->gray) 2927 2726 { 2928 2727 *sp = (png_byte)background->gray; … … 2940 2739 for (i = 0; i < row_width; i++, sp++) 2941 2740 { 2942 if (*sp == trans_ values->gray)2741 if (*sp == trans_color->gray) 2943 2742 { 2944 2743 *sp = (png_byte)background->gray; … … 2951 2750 case 16: 2952 2751 { 2953 #if defined(PNG_READ_GAMMA_SUPPORTED)2752 #ifdef PNG_READ_GAMMA_SUPPORTED 2954 2753 if (gamma_16 != NULL) 2955 2754 { … … 2960 2759 2961 2760 v = (png_uint_16)(((*sp) << 8) + *(sp + 1)); 2962 if (v == trans_ values->gray)2761 if (v == trans_color->gray) 2963 2762 { 2964 2763 /* Background is already in screen gamma */ … … 2983 2782 2984 2783 v = (png_uint_16)(((*sp) << 8) + *(sp + 1)); 2985 if (v == trans_ values->gray)2784 if (v == trans_color->gray) 2986 2785 { 2987 2786 *sp = (png_byte)((background->gray >> 8) & 0xff); … … 3000 2799 if (row_info->bit_depth == 8) 3001 2800 { 3002 #if defined(PNG_READ_GAMMA_SUPPORTED)2801 #ifdef PNG_READ_GAMMA_SUPPORTED 3003 2802 if (gamma_table != NULL) 3004 2803 { … … 3006 2805 for (i = 0; i < row_width; i++, sp += 3) 3007 2806 { 3008 if (*sp == trans_ values->red &&3009 *(sp + 1) == trans_ values->green &&3010 *(sp + 2) == trans_ values->blue)2807 if (*sp == trans_color->red && 2808 *(sp + 1) == trans_color->green && 2809 *(sp + 2) == trans_color->blue) 3011 2810 { 3012 2811 *sp = (png_byte)background->red; … … 3028 2827 for (i = 0; i < row_width; i++, sp += 3) 3029 2828 { 3030 if (*sp == trans_ values->red &&3031 *(sp + 1) == trans_ values->green &&3032 *(sp + 2) == trans_ values->blue)2829 if (*sp == trans_color->red && 2830 *(sp + 1) == trans_color->green && 2831 *(sp + 2) == trans_color->blue) 3033 2832 { 3034 2833 *sp = (png_byte)background->red; … … 3041 2840 else /* if (row_info->bit_depth == 16) */ 3042 2841 { 3043 #if defined(PNG_READ_GAMMA_SUPPORTED)2842 #ifdef PNG_READ_GAMMA_SUPPORTED 3044 2843 if (gamma_16 != NULL) 3045 2844 { … … 3050 2849 png_uint_16 g = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3)); 3051 2850 png_uint_16 b = (png_uint_16)(((*(sp+4)) << 8) + *(sp+5)); 3052 if (r == trans_ values->red && g == trans_values->green &&3053 b == trans_ values->blue)2851 if (r == trans_color->red && g == trans_color->green && 2852 b == trans_color->blue) 3054 2853 { 3055 2854 /* Background is already in screen gamma */ … … 3085 2884 png_uint_16 b = (png_uint_16)(((*(sp+4)) << 8) + *(sp+5)); 3086 2885 3087 if (r == trans_ values->red && g == trans_values->green &&3088 b == trans_ values->blue)2886 if (r == trans_color->red && g == trans_color->green && 2887 b == trans_color->blue) 3089 2888 { 3090 2889 *sp = (png_byte)((background->red >> 8) & 0xff); … … 3105 2904 if (row_info->bit_depth == 8) 3106 2905 { 3107 #if defined(PNG_READ_GAMMA_SUPPORTED)2906 #ifdef PNG_READ_GAMMA_SUPPORTED 3108 2907 if (gamma_to_1 != NULL && gamma_from_1 != NULL && 3109 2908 gamma_table != NULL) … … 3147 2946 *dp = *sp; 3148 2947 } 3149 #if defined(PNG_READ_GAMMA_SUPPORTED)2948 #ifdef PNG_READ_GAMMA_SUPPORTED 3150 2949 else if (a == 0) 3151 2950 { … … 3164 2963 else /* if (png_ptr->bit_depth == 16) */ 3165 2964 { 3166 #if defined(PNG_READ_GAMMA_SUPPORTED)2965 #ifdef PNG_READ_GAMMA_SUPPORTED 3167 2966 if (gamma_16 != NULL && gamma_16_from_1 != NULL && 3168 2967 gamma_16_to_1 != NULL) … … 3182 2981 *(dp + 1) = (png_byte)(v & 0xff); 3183 2982 } 3184 #if defined(PNG_READ_GAMMA_SUPPORTED)2983 #ifdef PNG_READ_GAMMA_SUPPORTED 3185 2984 else if (a == 0) 3186 2985 #else … … 3192 2991 *(dp + 1) = (png_byte)(background->gray & 0xff); 3193 2992 } 3194 #if defined(PNG_READ_GAMMA_SUPPORTED)2993 #ifdef PNG_READ_GAMMA_SUPPORTED 3195 2994 else 3196 2995 { … … 3218 3017 png_memcpy(dp, sp, 2); 3219 3018 } 3220 #if defined(PNG_READ_GAMMA_SUPPORTED)3019 #ifdef PNG_READ_GAMMA_SUPPORTED 3221 3020 else if (a == 0) 3222 3021 #else … … 3227 3026 *(dp + 1) = (png_byte)(background->gray & 0xff); 3228 3027 } 3229 #if defined(PNG_READ_GAMMA_SUPPORTED)3028 #ifdef PNG_READ_GAMMA_SUPPORTED 3230 3029 else 3231 3030 { … … 3248 3047 if (row_info->bit_depth == 8) 3249 3048 { 3250 #if defined(PNG_READ_GAMMA_SUPPORTED)3049 #ifdef PNG_READ_GAMMA_SUPPORTED 3251 3050 if (gamma_to_1 != NULL && gamma_from_1 != NULL && 3252 3051 gamma_table != NULL) … … 3321 3120 else /* if (row_info->bit_depth == 16) */ 3322 3121 { 3323 #if defined(PNG_READ_GAMMA_SUPPORTED)3122 #ifdef PNG_READ_GAMMA_SUPPORTED 3324 3123 if (gamma_16 != NULL && gamma_16_from_1 != NULL && 3325 3124 gamma_16_to_1 != NULL) … … 3438 3237 #endif 3439 3238 3440 #if defined(PNG_READ_GAMMA_SUPPORTED)3239 #ifdef PNG_READ_GAMMA_SUPPORTED 3441 3240 /* Gamma correct the image, avoiding the alpha channel. Make sure 3442 3241 * you do this after you deal with the transparency issue on grayscale … … 3455 3254 3456 3255 png_debug(1, "in png_do_gamma"); 3256 3457 3257 if ( 3458 #if defined(PNG_USELESS_TESTS_SUPPORTED)3459 row != NULL && row_info != NULL &&3460 #endif3461 3258 ((row_info->bit_depth <= 8 && gamma_table != NULL) || 3462 3259 (row_info->bit_depth == 16 && gamma_16_table != NULL))) … … 3629 3426 #endif 3630 3427 3631 #if defined(PNG_READ_EXPAND_SUPPORTED)3428 #ifdef PNG_READ_EXPAND_SUPPORTED 3632 3429 /* Expands a palette row to an RGB or RGBA row depending 3633 3430 * upon whether you supply trans and num_trans. … … 3635 3432 void /* PRIVATE */ 3636 3433 png_do_expand_palette(png_row_infop row_info, png_bytep row, 3637 png_colorp palette, png_bytep trans , int num_trans)3434 png_colorp palette, png_bytep trans_alpha, int num_trans) 3638 3435 { 3639 3436 int shift, value; … … 3643 3440 3644 3441 png_debug(1, "in png_do_expand_palette"); 3442 3645 3443 if ( 3646 #if defined(PNG_USELESS_TESTS_SUPPORTED)3647 row != NULL && row_info != NULL &&3648 #endif3649 3444 row_info->color_type == PNG_COLOR_TYPE_PALETTE) 3650 3445 { … … 3729 3524 case 8: 3730 3525 { 3731 if (trans != NULL)3526 if (trans_alpha != NULL) 3732 3527 { 3733 3528 sp = row + (png_size_t)row_width - 1; … … 3739 3534 *dp-- = 0xff; 3740 3535 else 3741 *dp-- = trans [*sp];3536 *dp-- = trans_alpha[*sp]; 3742 3537 *dp-- = palette[*sp].blue; 3743 3538 *dp-- = palette[*sp].green; … … 3789 3584 3790 3585 png_debug(1, "in png_do_expand"); 3791 #if defined(PNG_USELESS_TESTS_SUPPORTED) 3792 if (row != NULL && row_info != NULL) 3793 #endif 3586 3794 3587 { 3795 3588 if (row_info->color_type == PNG_COLOR_TYPE_GRAY) … … 3990 3783 #endif 3991 3784 3992 #if defined(PNG_READ_DITHER_SUPPORTED)3785 #ifdef PNG_READ_DITHER_SUPPORTED 3993 3786 void /* PRIVATE */ 3994 3787 png_do_dither(png_row_infop row_info, png_bytep row, … … 4000 3793 4001 3794 png_debug(1, "in png_do_dither"); 4002 #if defined(PNG_USELESS_TESTS_SUPPORTED) 4003 if (row != NULL && row_info != NULL) 4004 #endif 3795 4005 3796 { 4006 3797 if (row_info->color_type == PNG_COLOR_TYPE_RGB && … … 4082 3873 4083 3874 #ifdef PNG_FLOATING_POINT_SUPPORTED 4084 #if defined(PNG_READ_GAMMA_SUPPORTED)3875 #ifdef PNG_READ_GAMMA_SUPPORTED 4085 3876 static PNG_CONST int png_gamma_shift[] = 4086 3877 {0x10, 0x21, 0x42, 0x84, 0x110, 0x248, 0x550, 0xff0, 0x00}; … … 4090 3881 * the future. Note also how the gamma_16 tables are segmented so that 4091 3882 * we don't need to allocate > 64K chunks for a full 16-bit table. 3883 * 3884 * See the PNG extensions document for an integer algorithm for creating 3885 * the gamma tables. Maybe we will implement that here someday. 3886 * 3887 * We should only reach this point if 3888 * 3889 * the file_gamma is known (i.e., the gAMA or sRGB chunk is present, 3890 * or the application has provided a file_gamma) 3891 * 3892 * AND 3893 * { 3894 * the screen_gamma is known 3895 * 3896 * OR 3897 * 3898 * RGB_to_gray transformation is being performed 3899 * } 3900 * 3901 * AND 3902 * { 3903 * the screen_gamma is different from the reciprocal of the 3904 * file_gamma by more than the specified threshold 3905 * 3906 * OR 3907 * 3908 * a background color has been specified and the file_gamma 3909 * and screen_gamma are not 1.0, within the specified threshold. 3910 * } 4092 3911 */ 3912 4093 3913 void /* PRIVATE */ 4094 png_build_gamma_table(png_structp png_ptr )3914 png_build_gamma_table(png_structp png_ptr, png_byte bit_depth) 4095 3915 { 4096 3916 png_debug(1, "in png_build_gamma_table"); 4097 3917 4098 if ( png_ptr->bit_depth <= 8)3918 if (bit_depth <= 8) 4099 3919 { 4100 3920 int i; … … 4200 4020 g = 1.0; 4201 4021 4202 png_ptr->gamma_16_table = (png_uint_16pp)png_ malloc(png_ptr,4022 png_ptr->gamma_16_table = (png_uint_16pp)png_calloc(png_ptr, 4203 4023 (png_uint_32)(num * png_sizeof(png_uint_16p))); 4204 png_memset(png_ptr->gamma_16_table, 0, num * png_sizeof(png_uint_16p));4205 4024 4206 4025 if (png_ptr->transformations & (PNG_16_TO_8 | PNG_BACKGROUND)) … … 4262 4081 g = 1.0 / (png_ptr->gamma); 4263 4082 4264 png_ptr->gamma_16_to_1 = (png_uint_16pp)png_ malloc(png_ptr,4083 png_ptr->gamma_16_to_1 = (png_uint_16pp)png_calloc(png_ptr, 4265 4084 (png_uint_32)(num * png_sizeof(png_uint_16p ))); 4266 png_memset(png_ptr->gamma_16_to_1, 0, num * png_sizeof(png_uint_16p));4267 4085 4268 4086 for (i = 0; i < num; i++) … … 4287 4105 g = png_ptr->gamma; /* Probably doing rgb_to_gray */ 4288 4106 4289 png_ptr->gamma_16_from_1 = (png_uint_16pp)png_ malloc(png_ptr,4107 png_ptr->gamma_16_from_1 = (png_uint_16pp)png_calloc(png_ptr, 4290 4108 (png_uint_32)(num * png_sizeof(png_uint_16p))); 4291 png_memset(png_ptr->gamma_16_from_1, 0,4292 num * png_sizeof(png_uint_16p));4293 4109 4294 4110 for (i = 0; i < num; i++) … … 4315 4131 #endif 4316 4132 4317 #if defined(PNG_MNG_FEATURES_SUPPORTED)4133 #ifdef PNG_MNG_FEATURES_SUPPORTED 4318 4134 /* Undoes intrapixel differencing */ 4319 4135 void /* PRIVATE */ … … 4321 4137 { 4322 4138 png_debug(1, "in png_do_read_intrapixel"); 4139 4323 4140 if ( 4324 #if defined(PNG_USELESS_TESTS_SUPPORTED)4325 row != NULL && row_info != NULL &&4326 #endif4327 4141 (row_info->color_type & PNG_COLOR_MASK_COLOR)) 4328 4142 {
Note:
See TracChangeset
for help on using the changeset viewer.