| OLD | NEW |
| 1 /* $Id: tif_getimage.c,v 1.90 2015-06-17 01:34:08 bfriesen Exp $ */ | 1 /* $Id: tif_getimage.c,v 1.90 2015-06-17 01:34:08 bfriesen Exp $ */ |
| 2 | 2 |
| 3 /* | 3 /* |
| 4 * Copyright (c) 1991-1997 Sam Leffler | 4 * Copyright (c) 1991-1997 Sam Leffler |
| 5 * Copyright (c) 1991-1997 Silicon Graphics, Inc. | 5 * Copyright (c) 1991-1997 Silicon Graphics, Inc. |
| 6 * | 6 * |
| 7 * Permission to use, copy, modify, distribute, and sell this software and | 7 * Permission to use, copy, modify, distribute, and sell this software and |
| 8 * its documentation for any purpose is hereby granted without fee, provided | 8 * its documentation for any purpose is hereby granted without fee, provided |
| 9 * that (i) the above copyright notices and this permission notice appear in | 9 * that (i) the above copyright notices and this permission notice appear in |
| 10 * all copies of the software and related documentation, and (ii) the names of | 10 * all copies of the software and related documentation, and (ii) the names of |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 td->td_compression != COMPRESSION_SGILOG24) { | 175 td->td_compression != COMPRESSION_SGILOG24) { |
| 176 sprintf(emsg, "Sorry, LogLuv data must have %s=%
d or %d", | 176 sprintf(emsg, "Sorry, LogLuv data must have %s=%
d or %d", |
| 177 "Compression", COMPRESSION_SGILOG, COMPRESSI
ON_SGILOG24); | 177 "Compression", COMPRESSION_SGILOG, COMPRESSI
ON_SGILOG24); |
| 178 return (0); | 178 return (0); |
| 179 } | 179 } |
| 180 if (td->td_planarconfig != PLANARCONFIG_CONTIG) { | 180 if (td->td_planarconfig != PLANARCONFIG_CONTIG) { |
| 181 sprintf(emsg, "Sorry, can not handle LogLuv imag
es with %s=%d", | 181 sprintf(emsg, "Sorry, can not handle LogLuv imag
es with %s=%d", |
| 182 "Planarconfiguration", td->td_planarconfig); | 182 "Planarconfiguration", td->td_planarconfig); |
| 183 return (0); | 183 return (0); |
| 184 } | 184 } |
| 185 » » » if( td->td_samplesperpixel != 3 ) | 185 » » » if( td->td_samplesperpixel != 3 || colorchannels != 3 ) |
| 186 { | 186 { |
| 187 sprintf(emsg, | 187 sprintf(emsg, |
| 188 "Sorry, can not handle image with %s=%d", | 188 "Sorry, can not handle image with %s=%d, %s=%d", |
| 189 "Samples/pixel", td->td_samplesperpixel); | 189 "Samples/pixel", td->td_samplesperpixel, |
| 190 "colorchannels", colorchannels); |
| 190 return 0; | 191 return 0; |
| 191 } | 192 } |
| 192 break; | 193 break; |
| 193 case PHOTOMETRIC_CIELAB: | 194 case PHOTOMETRIC_CIELAB: |
| 194 if( td->td_samplesperpixel != 3 || td->td_bitspersample != 8 ) | 195 if( td->td_samplesperpixel != 3 || colorchannels != 3 || td->td_bits
persample != 8 ) |
| 195 { | 196 { |
| 196 sprintf(emsg, | 197 sprintf(emsg, |
| 197 "Sorry, can not handle image with %s=%d and %s=%d", | 198 "Sorry, can not handle image with %s=%d, %s=%d and %s=%d
", |
| 198 "Samples/pixel", td->td_samplesperpixel, | 199 "Samples/pixel", td->td_samplesperpixel, |
| 200 "colorchannels", colorchannels, |
| 199 "Bits/sample", td->td_bitspersample); | 201 "Bits/sample", td->td_bitspersample); |
| 200 return 0; | 202 return 0; |
| 201 } | 203 } |
| 202 break; | 204 break; |
| 203 default: | 205 default: |
| 204 sprintf(emsg, "Sorry, can not handle image with %s=%d", | 206 sprintf(emsg, "Sorry, can not handle image with %s=%d", |
| 205 photoTag, photometric); | 207 photoTag, photometric); |
| 206 return (0); | 208 return (0); |
| 207 } | 209 } |
| 208 return (1); | 210 return (1); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 248 int | 250 int |
| 249 TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stop, char emsg[1024]) | 251 TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stop, char emsg[1024]) |
| 250 { | 252 { |
| 251 uint16* sampleinfo; | 253 uint16* sampleinfo; |
| 252 uint16 extrasamples; | 254 uint16 extrasamples; |
| 253 uint16 planarconfig; | 255 uint16 planarconfig; |
| 254 uint16 compress; | 256 uint16 compress; |
| 255 int colorchannels; | 257 int colorchannels; |
| 256 uint16 *red_orig, *green_orig, *blue_orig; | 258 uint16 *red_orig, *green_orig, *blue_orig; |
| 257 int n_color; | 259 int n_color; |
| 260 |
| 261 if( !TIFFRGBAImageOK(tif, emsg) ) |
| 262 return 0; |
| 258 | 263 |
| 259 /* Initialize to normal values */ | 264 /* Initialize to normal values */ |
| 260 img->row_offset = 0; | 265 img->row_offset = 0; |
| 261 img->col_offset = 0; | 266 img->col_offset = 0; |
| 262 img->redcmap = NULL; | 267 img->redcmap = NULL; |
| 263 img->greencmap = NULL; | 268 img->greencmap = NULL; |
| 264 img->bluecmap = NULL; | 269 img->bluecmap = NULL; |
| 265 img->req_orientation = ORIENTATION_BOTLEFT; /* It is the default */ | 270 img->req_orientation = ORIENTATION_BOTLEFT; /* It is the default */ |
| 266 | 271 |
| 267 img->tif = tif; | 272 img->tif = tif; |
| (...skipping 2233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2501 */ | 2506 */ |
| 2502 static int | 2507 static int |
| 2503 PickContigCase(TIFFRGBAImage* img) | 2508 PickContigCase(TIFFRGBAImage* img) |
| 2504 { | 2509 { |
| 2505 img->get = TIFFIsTiled(img->tif) ? gtTileContig : gtStripContig; | 2510 img->get = TIFFIsTiled(img->tif) ? gtTileContig : gtStripContig; |
| 2506 img->put.contig = NULL; | 2511 img->put.contig = NULL; |
| 2507 switch (img->photometric) { | 2512 switch (img->photometric) { |
| 2508 case PHOTOMETRIC_RGB: | 2513 case PHOTOMETRIC_RGB: |
| 2509 switch (img->bitspersample) { | 2514 switch (img->bitspersample) { |
| 2510 case 8: | 2515 case 8: |
| 2511 » » » » » if (img->alpha == EXTRASAMPLE_ASSOCALPHA
) | 2516 » » » » » if (img->alpha == EXTRASAMPLE_ASSOCALPHA
&& |
| 2517 » » » » » » img->samplesperpixel >= 4) |
| 2512 img->put.contig = putRGBAAcontig
8bittile; | 2518 img->put.contig = putRGBAAcontig
8bittile; |
| 2513 » » » » » else if (img->alpha == EXTRASAMPLE_UNASS
ALPHA) | 2519 » » » » » else if (img->alpha == EXTRASAMPLE_UNASS
ALPHA && |
| 2520 » » » » » » » img->samplesperpixel >=
4) |
| 2514 { | 2521 { |
| 2515 if (BuildMapUaToAa(img)) | 2522 if (BuildMapUaToAa(img)) |
| 2516 img->put.contig = putRGB
UAcontig8bittile; | 2523 img->put.contig = putRGB
UAcontig8bittile; |
| 2517 } | 2524 } |
| 2518 » » » » » else | 2525 » » » » » else if( img->samplesperpixel >= 3 ) |
| 2519 img->put.contig = putRGBcontig8b
ittile; | 2526 img->put.contig = putRGBcontig8b
ittile; |
| 2520 break; | 2527 break; |
| 2521 case 16: | 2528 case 16: |
| 2522 » » » » » if (img->alpha == EXTRASAMPLE_ASSOCALPHA
) | 2529 » » » » » if (img->alpha == EXTRASAMPLE_ASSOCALPHA
&& |
| 2530 » » » » » » img->samplesperpixel >=4 ) |
| 2523 { | 2531 { |
| 2524 if (BuildMapBitdepth16To8(img)) | 2532 if (BuildMapBitdepth16To8(img)) |
| 2525 img->put.contig = putRGB
AAcontig16bittile; | 2533 img->put.contig = putRGB
AAcontig16bittile; |
| 2526 } | 2534 } |
| 2527 » » » » » else if (img->alpha == EXTRASAMPLE_UNASS
ALPHA) | 2535 » » » » » else if (img->alpha == EXTRASAMPLE_UNASS
ALPHA && |
| 2536 » » » » » » » img->samplesperpixel >=
4 ) |
| 2528 { | 2537 { |
| 2529 if (BuildMapBitdepth16To8(img) &
& | 2538 if (BuildMapBitdepth16To8(img) &
& |
| 2530 BuildMapUaToAa(img)) | 2539 BuildMapUaToAa(img)) |
| 2531 img->put.contig = putRGB
UAcontig16bittile; | 2540 img->put.contig = putRGB
UAcontig16bittile; |
| 2532 } | 2541 } |
| 2533 » » » » » else | 2542 » » » » » else if( img->samplesperpixel >=3 ) |
| 2534 { | 2543 { |
| 2535 if (BuildMapBitdepth16To8(img)) | 2544 if (BuildMapBitdepth16To8(img)) |
| 2536 img->put.contig = putRGB
contig16bittile; | 2545 img->put.contig = putRGB
contig16bittile; |
| 2537 } | 2546 } |
| 2538 break; | 2547 break; |
| 2539 } | 2548 } |
| 2540 break; | 2549 break; |
| 2541 case PHOTOMETRIC_SEPARATED: | 2550 case PHOTOMETRIC_SEPARATED: |
| 2542 » » » if (buildMap(img)) { | 2551 » » » if (img->samplesperpixel >=4 && buildMap(img)) { |
| 2543 if (img->bitspersample == 8) { | 2552 if (img->bitspersample == 8) { |
| 2544 if (!img->Map) | 2553 if (!img->Map) |
| 2545 img->put.contig = putRGBcontig8b
itCMYKtile; | 2554 img->put.contig = putRGBcontig8b
itCMYKtile; |
| 2546 else | 2555 else |
| 2547 img->put.contig = putRGBcontig8b
itCMYKMaptile; | 2556 img->put.contig = putRGBcontig8b
itCMYKMaptile; |
| 2548 } | 2557 } |
| 2549 } | 2558 } |
| 2550 break; | 2559 break; |
| 2551 case PHOTOMETRIC_PALETTE: | 2560 case PHOTOMETRIC_PALETTE: |
| 2552 if (buildMap(img)) { | 2561 if (buildMap(img)) { |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2628 img->put.contig = putcon
tig8bitYCbCr12tile; | 2637 img->put.contig = putcon
tig8bitYCbCr12tile; |
| 2629 break; | 2638 break; |
| 2630 case 0x11: | 2639 case 0x11: |
| 2631 img->put.contig = putcon
tig8bitYCbCr11tile; | 2640 img->put.contig = putcon
tig8bitYCbCr11tile; |
| 2632 break; | 2641 break; |
| 2633 } | 2642 } |
| 2634 } | 2643 } |
| 2635 } | 2644 } |
| 2636 break; | 2645 break; |
| 2637 case PHOTOMETRIC_CIELAB: | 2646 case PHOTOMETRIC_CIELAB: |
| 2638 » » » if (buildMap(img)) { | 2647 » » » if (img->samplesperpixel == 3 && buildMap(img)) { |
| 2639 if (img->bitspersample == 8) | 2648 if (img->bitspersample == 8) |
| 2640 img->put.contig = initCIELabConversion(i
mg); | 2649 img->put.contig = initCIELabConversion(i
mg); |
| 2641 break; | 2650 break; |
| 2642 } | 2651 } |
| 2643 } | 2652 } |
| 2644 return ((img->get!=NULL) && (img->put.contig!=NULL)); | 2653 return ((img->get!=NULL) && (img->put.contig!=NULL)); |
| 2645 } | 2654 } |
| 2646 | 2655 |
| 2647 /* | 2656 /* |
| 2648 * Select the appropriate conversion routine for unpacked data. | 2657 * Select the appropriate conversion routine for unpacked data. |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2919 } | 2928 } |
| 2920 | 2929 |
| 2921 /* vim: set ts=8 sts=8 sw=8 noet: */ | 2930 /* vim: set ts=8 sts=8 sw=8 noet: */ |
| 2922 /* | 2931 /* |
| 2923 * Local Variables: | 2932 * Local Variables: |
| 2924 * mode: c | 2933 * mode: c |
| 2925 * c-basic-offset: 8 | 2934 * c-basic-offset: 8 |
| 2926 * fill-column: 78 | 2935 * fill-column: 78 |
| 2927 * End: | 2936 * End: |
| 2928 */ | 2937 */ |
| OLD | NEW |