| OLD | NEW |
| 1 | 1 |
| 2 /* pngrtran.c - transforms the data in a row for PNG readers | 2 /* pngrtran.c - transforms the data in a row for PNG readers |
| 3 * | 3 * |
| 4 * Last changed in libpng 1.2.45 [July 7, 2011] | 4 * Last changed in libpng 1.2.51 [February 6, 2014] |
| 5 * Copyright (c) 1998-2011 Glenn Randers-Pehrson | 5 * Copyright (c) 1998-2014 Glenn Randers-Pehrson |
| 6 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) | 6 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) |
| 7 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) | 7 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) |
| 8 * | 8 * |
| 9 * This code is released under the libpng license. | 9 * This code is released under the libpng license. |
| 10 * For conditions of distribution and use, see the disclaimer | 10 * For conditions of distribution and use, see the disclaimer |
| 11 * and license in png.h | 11 * and license in png.h |
| 12 * | 12 * |
| 13 * This file contains functions optionally called by an application | 13 * This file contains functions optionally called by an application |
| 14 * in order to tell libpng how to handle data when reading a PNG. | 14 * in order to tell libpng how to handle data when reading a PNG. |
| 15 * Transformations that are used in both reading and writing are | 15 * Transformations that are used in both reading and writing are |
| (...skipping 894 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 910 | 910 |
| 911 if ((color_type == PNG_COLOR_TYPE_PALETTE && png_ptr->num_trans != 0) | 911 if ((color_type == PNG_COLOR_TYPE_PALETTE && png_ptr->num_trans != 0) |
| 912 && (fabs(png_ptr->screen_gamma * png_ptr->gamma - 1.0) | 912 && (fabs(png_ptr->screen_gamma * png_ptr->gamma - 1.0) |
| 913 < PNG_GAMMA_THRESHOLD)) | 913 < PNG_GAMMA_THRESHOLD)) |
| 914 { | 914 { |
| 915 int i, k; | 915 int i, k; |
| 916 k=0; | 916 k=0; |
| 917 for (i=0; i<png_ptr->num_trans; i++) | 917 for (i=0; i<png_ptr->num_trans; i++) |
| 918 { | 918 { |
| 919 if (png_ptr->trans[i] != 0 && png_ptr->trans[i] != 0xff) | 919 if (png_ptr->trans[i] != 0 && png_ptr->trans[i] != 0xff) |
| 920 { |
| 920 k=1; /* Partial transparency is present */ | 921 k=1; /* Partial transparency is present */ |
| 922 break; |
| 923 } |
| 921 } | 924 } |
| 922 if (k == 0) | 925 if (k == 0) |
| 923 png_ptr->transformations &= ~PNG_GAMMA; | 926 png_ptr->transformations &= ~PNG_GAMMA; |
| 924 } | 927 } |
| 925 | 928 |
| 926 if ((png_ptr->transformations & (PNG_GAMMA | PNG_RGB_TO_GRAY)) && | 929 if ((png_ptr->transformations & (PNG_GAMMA | PNG_RGB_TO_GRAY)) && |
| 927 png_ptr->gamma != 0.0) | 930 png_ptr->gamma != 0.0) |
| 928 { | 931 { |
| 929 png_build_gamma_table(png_ptr); | 932 png_build_gamma_table(png_ptr); |
| 930 | 933 |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1156 } | 1159 } |
| 1157 | 1160 |
| 1158 /* Handled alpha, still need to strip the channel. */ | 1161 /* Handled alpha, still need to strip the channel. */ |
| 1159 png_ptr->transformations &= ~PNG_BACKGROUND; | 1162 png_ptr->transformations &= ~PNG_BACKGROUND; |
| 1160 png_ptr->transformations |= PNG_STRIP_ALPHA; | 1163 png_ptr->transformations |= PNG_STRIP_ALPHA; |
| 1161 } | 1164 } |
| 1162 #endif /* PNG_READ_BACKGROUND_SUPPORTED */ | 1165 #endif /* PNG_READ_BACKGROUND_SUPPORTED */ |
| 1163 | 1166 |
| 1164 #ifdef PNG_READ_SHIFT_SUPPORTED | 1167 #ifdef PNG_READ_SHIFT_SUPPORTED |
| 1165 if ((png_ptr->transformations & PNG_SHIFT) && | 1168 if ((png_ptr->transformations & PNG_SHIFT) && |
| 1169 !(png_ptr->transformations & PNG_EXPAND) && |
| 1166 (color_type == PNG_COLOR_TYPE_PALETTE)) | 1170 (color_type == PNG_COLOR_TYPE_PALETTE)) |
| 1167 { | 1171 { |
| 1168 png_uint_16 i; | 1172 png_uint_16 i; |
| 1169 png_uint_16 istop = png_ptr->num_palette; | 1173 png_uint_16 istop = png_ptr->num_palette; |
| 1170 int sr = 8 - png_ptr->sig_bit.red; | 1174 int sr = 8 - png_ptr->sig_bit.red; |
| 1171 int sg = 8 - png_ptr->sig_bit.green; | 1175 int sg = 8 - png_ptr->sig_bit.green; |
| 1172 int sb = 8 - png_ptr->sig_bit.blue; | 1176 int sb = 8 - png_ptr->sig_bit.blue; |
| 1173 | 1177 |
| 1174 if (sr < 0 || sr > 8) | 1178 if (sr < 0 || sr > 8) |
| 1175 sr = 0; | 1179 sr = 0; |
| 1176 if (sg < 0 || sg > 8) | 1180 if (sg < 0 || sg > 8) |
| 1177 sg = 0; | 1181 sg = 0; |
| 1178 if (sb < 0 || sb > 8) | 1182 if (sb < 0 || sb > 8) |
| 1179 sb = 0; | 1183 sb = 0; |
| 1180 for (i = 0; i < istop; i++) | 1184 for (i = 0; i < istop; i++) |
| 1181 { | 1185 { |
| 1182 png_ptr->palette[i].red >>= sr; | 1186 png_ptr->palette[i].red >>= sr; |
| 1183 png_ptr->palette[i].green >>= sg; | 1187 png_ptr->palette[i].green >>= sg; |
| 1184 png_ptr->palette[i].blue >>= sb; | 1188 png_ptr->palette[i].blue >>= sb; |
| 1185 } | 1189 } |
| 1190 |
| 1191 png_ptr->transformations &= ~PNG_SHIFT; |
| 1186 } | 1192 } |
| 1187 #endif /* PNG_READ_SHIFT_SUPPORTED */ | 1193 #endif /* PNG_READ_SHIFT_SUPPORTED */ |
| 1188 } | 1194 } |
| 1189 #if !defined(PNG_READ_GAMMA_SUPPORTED) && !defined(PNG_READ_SHIFT_SUPPORTED) \ | 1195 #if !defined(PNG_READ_GAMMA_SUPPORTED) && !defined(PNG_READ_SHIFT_SUPPORTED) \ |
| 1190 && !defined(PNG_READ_BACKGROUND_SUPPORTED) | 1196 && !defined(PNG_READ_BACKGROUND_SUPPORTED) |
| 1191 if (png_ptr) | 1197 if (png_ptr) |
| 1192 return; | 1198 return; |
| 1193 #endif | 1199 #endif |
| 1194 } | 1200 } |
| 1195 | 1201 |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1366 #else | 1372 #else |
| 1367 png_warning(png_ptr, "Uninitialized row"); | 1373 png_warning(png_ptr, "Uninitialized row"); |
| 1368 #endif | 1374 #endif |
| 1369 #endif | 1375 #endif |
| 1370 | 1376 |
| 1371 #ifdef PNG_READ_EXPAND_SUPPORTED | 1377 #ifdef PNG_READ_EXPAND_SUPPORTED |
| 1372 if (png_ptr->transformations & PNG_EXPAND) | 1378 if (png_ptr->transformations & PNG_EXPAND) |
| 1373 { | 1379 { |
| 1374 if (png_ptr->row_info.color_type == PNG_COLOR_TYPE_PALETTE) | 1380 if (png_ptr->row_info.color_type == PNG_COLOR_TYPE_PALETTE) |
| 1375 { | 1381 { |
| 1382 if (png_ptr->palette == NULL) |
| 1383 png_error (png_ptr, "Palette is NULL in indexed image"); |
| 1384 |
| 1376 png_do_expand_palette(&(png_ptr->row_info), png_ptr->row_buf + 1, | 1385 png_do_expand_palette(&(png_ptr->row_info), png_ptr->row_buf + 1, |
| 1377 png_ptr->palette, png_ptr->trans, png_ptr->num_trans); | 1386 png_ptr->palette, png_ptr->trans, png_ptr->num_trans); |
| 1378 } | 1387 } |
| 1379 else | 1388 else |
| 1380 { | 1389 { |
| 1381 if (png_ptr->num_trans && | 1390 if (png_ptr->num_trans && |
| 1382 (png_ptr->transformations & PNG_EXPAND_tRNS)) | 1391 (png_ptr->transformations & PNG_EXPAND_tRNS)) |
| 1383 png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1, | 1392 png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1, |
| 1384 &(png_ptr->trans_values)); | 1393 &(png_ptr->trans_values)); |
| 1385 else | 1394 else |
| (...skipping 3072 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4458 *(rp ) = (png_byte)((red >> 8) & 0xff); | 4467 *(rp ) = (png_byte)((red >> 8) & 0xff); |
| 4459 *(rp+1) = (png_byte)(red & 0xff); | 4468 *(rp+1) = (png_byte)(red & 0xff); |
| 4460 *(rp+4) = (png_byte)((blue >> 8) & 0xff); | 4469 *(rp+4) = (png_byte)((blue >> 8) & 0xff); |
| 4461 *(rp+5) = (png_byte)(blue & 0xff); | 4470 *(rp+5) = (png_byte)(blue & 0xff); |
| 4462 } | 4471 } |
| 4463 } | 4472 } |
| 4464 } | 4473 } |
| 4465 } | 4474 } |
| 4466 #endif /* PNG_MNG_FEATURES_SUPPORTED */ | 4475 #endif /* PNG_MNG_FEATURES_SUPPORTED */ |
| 4467 #endif /* PNG_READ_SUPPORTED */ | 4476 #endif /* PNG_READ_SUPPORTED */ |
| OLD | NEW |