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.51 [February 6, 2014] | 4 * Last changed in libpng 1.2.53 [February 26, 2015] |
5 * Copyright (c) 1998-2014 Glenn Randers-Pehrson | 5 * Copyright (c) 1998-2015 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 2387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2403 { | 2403 { |
2404 #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) | 2404 #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) |
2405 if (png_ptr->gamma_16_to_1 != NULL && | 2405 if (png_ptr->gamma_16_to_1 != NULL && |
2406 png_ptr->gamma_16_from_1 != NULL) | 2406 png_ptr->gamma_16_from_1 != NULL) |
2407 { | 2407 { |
2408 png_bytep sp = row; | 2408 png_bytep sp = row; |
2409 png_bytep dp = row; | 2409 png_bytep dp = row; |
2410 for (i = 0; i < row_width; i++) | 2410 for (i = 0; i < row_width; i++) |
2411 { | 2411 { |
2412 png_uint_16 red, green, blue, w; | 2412 png_uint_16 red, green, blue, w; |
| 2413 png_byte hi,lo; |
2413 | 2414 |
2414 red = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; | 2415 hi=*(sp)++; lo=*(sp)++; |
2415 green = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; | 2416 red = (png_uint_16)((hi << 8) | (lo)); |
2416 blue = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; | 2417 hi=*(sp)++; lo=*(sp)++; |
| 2418 green = (png_uint_16)((hi << 8) | (lo)); |
| 2419 hi=*(sp)++; lo=*(sp)++; |
| 2420 blue = (png_uint_16)((hi << 8) | (lo)); |
2417 | 2421 |
2418 if (red == green && red == blue) | 2422 if (red == green && red == blue) |
2419 w = red; | 2423 w = red; |
2420 else | 2424 else |
2421 { | 2425 { |
2422 png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >> | 2426 png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >> |
2423 png_ptr->gamma_shift][red>>8]; | 2427 png_ptr->gamma_shift][red>>8]; |
2424 png_uint_16 green_1 = | 2428 png_uint_16 green_1 = |
2425 png_ptr->gamma_16_to_1[(green&0xff) >> | 2429 png_ptr->gamma_16_to_1[(green&0xff) >> |
2426 png_ptr->gamma_shift][green>>8]; | 2430 png_ptr->gamma_shift][green>>8]; |
(...skipping 11 matching lines...) Expand all Loading... |
2438 } | 2442 } |
2439 } | 2443 } |
2440 else | 2444 else |
2441 #endif | 2445 #endif |
2442 { | 2446 { |
2443 png_bytep sp = row; | 2447 png_bytep sp = row; |
2444 png_bytep dp = row; | 2448 png_bytep dp = row; |
2445 for (i = 0; i < row_width; i++) | 2449 for (i = 0; i < row_width; i++) |
2446 { | 2450 { |
2447 png_uint_16 red, green, blue, gray16; | 2451 png_uint_16 red, green, blue, gray16; |
| 2452 png_byte hi,lo; |
2448 | 2453 |
2449 red = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; | 2454 hi=*(sp)++; lo=*(sp)++; |
2450 green = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; | 2455 red = (png_uint_16)((hi << 8) | (lo)); |
2451 blue = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; | 2456 hi=*(sp)++; lo=*(sp)++; |
| 2457 green = (png_uint_16)((hi << 8) | (lo)); |
| 2458 hi=*(sp)++; lo=*(sp)++; |
| 2459 blue = (png_uint_16)((hi << 8) | (lo)); |
2452 | 2460 |
2453 if (red != green || red != blue) | 2461 if (red != green || red != blue) |
2454 rgb_error |= 1; | 2462 rgb_error |= 1; |
2455 gray16 = (png_uint_16)((rc*red + gc*green + bc*blue)>>15); | 2463 gray16 = (png_uint_16)((rc*red + gc*green + bc*blue)>>15); |
2456 *(dp++) = (png_byte)((gray16>>8) & 0xff); | 2464 *(dp++) = (png_byte)((gray16>>8) & 0xff); |
2457 *(dp++) = (png_byte)(gray16 & 0xff); | 2465 *(dp++) = (png_byte)(gray16 & 0xff); |
2458 } | 2466 } |
2459 } | 2467 } |
2460 } | 2468 } |
2461 } | 2469 } |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2501 { | 2509 { |
2502 #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) | 2510 #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) |
2503 if (png_ptr->gamma_16_to_1 != NULL && | 2511 if (png_ptr->gamma_16_to_1 != NULL && |
2504 png_ptr->gamma_16_from_1 != NULL) | 2512 png_ptr->gamma_16_from_1 != NULL) |
2505 { | 2513 { |
2506 png_bytep sp = row; | 2514 png_bytep sp = row; |
2507 png_bytep dp = row; | 2515 png_bytep dp = row; |
2508 for (i = 0; i < row_width; i++) | 2516 for (i = 0; i < row_width; i++) |
2509 { | 2517 { |
2510 png_uint_16 red, green, blue, w; | 2518 png_uint_16 red, green, blue, w; |
| 2519 png_byte hi,lo; |
2511 | 2520 |
2512 red = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; | 2521 hi=*(sp)++; lo=*(sp)++; |
2513 green = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; | 2522 red = (png_uint_16)((hi << 8) | (lo)); |
2514 blue = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; | 2523 hi=*(sp)++; lo=*(sp)++; |
| 2524 green = (png_uint_16)((hi << 8) | (lo)); |
| 2525 hi=*(sp)++; lo=*(sp)++; |
| 2526 blue = (png_uint_16)((hi << 8) | (lo)); |
2515 | 2527 |
2516 if (red == green && red == blue) | 2528 if (red == green && red == blue) |
2517 w = red; | 2529 w = red; |
2518 else | 2530 else |
2519 { | 2531 { |
2520 png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >> | 2532 png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >> |
2521 png_ptr->gamma_shift][red>>8]; | 2533 png_ptr->gamma_shift][red>>8]; |
2522 png_uint_16 green_1 = | 2534 png_uint_16 green_1 = |
2523 png_ptr->gamma_16_to_1[(green&0xff) >> | 2535 png_ptr->gamma_16_to_1[(green&0xff) >> |
2524 png_ptr->gamma_shift][green>>8]; | 2536 png_ptr->gamma_shift][green>>8]; |
(...skipping 1942 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4467 *(rp ) = (png_byte)((red >> 8) & 0xff); | 4479 *(rp ) = (png_byte)((red >> 8) & 0xff); |
4468 *(rp+1) = (png_byte)(red & 0xff); | 4480 *(rp+1) = (png_byte)(red & 0xff); |
4469 *(rp+4) = (png_byte)((blue >> 8) & 0xff); | 4481 *(rp+4) = (png_byte)((blue >> 8) & 0xff); |
4470 *(rp+5) = (png_byte)(blue & 0xff); | 4482 *(rp+5) = (png_byte)(blue & 0xff); |
4471 } | 4483 } |
4472 } | 4484 } |
4473 } | 4485 } |
4474 } | 4486 } |
4475 #endif /* PNG_MNG_FEATURES_SUPPORTED */ | 4487 #endif /* PNG_MNG_FEATURES_SUPPORTED */ |
4476 #endif /* PNG_READ_SUPPORTED */ | 4488 #endif /* PNG_READ_SUPPORTED */ |
OLD | NEW |