|
|
- --- a/libtiff/tif_dir.c
- +++ b/libtiff/tif_dir.c
- @@ -1067,6 +1067,9 @@ _TIFFVGetField(TIFF* tif, uint32 tag, va
- if (td->td_samplesperpixel - td->td_extrasamples > 1) {
- *va_arg(ap, uint16**) = td->td_transferfunction[1];
- *va_arg(ap, uint16**) = td->td_transferfunction[2];
- + } else {
- + *va_arg(ap, uint16**) = NULL;
- + *va_arg(ap, uint16**) = NULL;
- }
- break;
- case TIFFTAG_REFERENCEBLACKWHITE:
- --- a/tools/tiff2pdf.c
- +++ b/tools/tiff2pdf.c
- @@ -237,7 +237,7 @@ typedef struct {
- float tiff_whitechromaticities[2];
- float tiff_primarychromaticities[6];
- float tiff_referenceblackwhite[2];
- - float* tiff_transferfunction[3];
- + uint16* tiff_transferfunction[3];
- int pdf_image_interpolate; /* 0 (default) : do not interpolate,
- 1 : interpolate */
- uint16 tiff_transferfunctioncount;
- @@ -1047,6 +1047,8 @@ void t2p_read_tiff_init(T2P* t2p, TIFF*
- uint16 pagen=0;
- uint16 paged=0;
- uint16 xuint16=0;
- + uint16 tiff_transferfunctioncount=0;
- + uint16* tiff_transferfunction[3];
-
- directorycount=TIFFNumberOfDirectories(input);
- t2p->tiff_pages = (T2P_PAGE*) _TIFFmalloc(TIFFSafeMultiply(tmsize_t,directorycount,sizeof(T2P_PAGE)));
- @@ -1147,26 +1149,48 @@ void t2p_read_tiff_init(T2P* t2p, TIFF*
- }
- #endif
- if (TIFFGetField(input, TIFFTAG_TRANSFERFUNCTION,
- - &(t2p->tiff_transferfunction[0]),
- - &(t2p->tiff_transferfunction[1]),
- - &(t2p->tiff_transferfunction[2]))) {
- - if((t2p->tiff_transferfunction[1] != (float*) NULL) &&
- - (t2p->tiff_transferfunction[2] != (float*) NULL) &&
- - (t2p->tiff_transferfunction[1] !=
- - t2p->tiff_transferfunction[0])) {
- - t2p->tiff_transferfunctioncount = 3;
- - t2p->tiff_pages[i].page_extra += 4;
- - t2p->pdf_xrefcount += 4;
- - } else {
- - t2p->tiff_transferfunctioncount = 1;
- - t2p->tiff_pages[i].page_extra += 2;
- - t2p->pdf_xrefcount += 2;
- - }
- - if(t2p->pdf_minorversion < 2)
- - t2p->pdf_minorversion = 2;
- + &(tiff_transferfunction[0]),
- + &(tiff_transferfunction[1]),
- + &(tiff_transferfunction[2]))) {
- +
- + if((tiff_transferfunction[1] != (uint16*) NULL) &&
- + (tiff_transferfunction[2] != (uint16*) NULL)
- + ) {
- + tiff_transferfunctioncount=3;
- + } else {
- + tiff_transferfunctioncount=1;
- + }
- } else {
- - t2p->tiff_transferfunctioncount=0;
- + tiff_transferfunctioncount=0;
- }
- +
- + if (i > 0){
- + if (tiff_transferfunctioncount != t2p->tiff_transferfunctioncount){
- + TIFFError(
- + TIFF2PDF_MODULE,
- + "Different transfer function on page %d",
- + i);
- + t2p->t2p_error = T2P_ERR_ERROR;
- + return;
- + }
- + }
- +
- + t2p->tiff_transferfunctioncount = tiff_transferfunctioncount;
- + t2p->tiff_transferfunction[0] = tiff_transferfunction[0];
- + t2p->tiff_transferfunction[1] = tiff_transferfunction[1];
- + t2p->tiff_transferfunction[2] = tiff_transferfunction[2];
- + if(tiff_transferfunctioncount == 3){
- + t2p->tiff_pages[i].page_extra += 4;
- + t2p->pdf_xrefcount += 4;
- + if(t2p->pdf_minorversion < 2)
- + t2p->pdf_minorversion = 2;
- + } else if (tiff_transferfunctioncount == 1){
- + t2p->tiff_pages[i].page_extra += 2;
- + t2p->pdf_xrefcount += 2;
- + if(t2p->pdf_minorversion < 2)
- + t2p->pdf_minorversion = 2;
- + }
- +
- if( TIFFGetField(
- input,
- TIFFTAG_ICCPROFILE,
- @@ -1827,10 +1851,9 @@ void t2p_read_tiff_data(T2P* t2p, TIFF*
- &(t2p->tiff_transferfunction[0]),
- &(t2p->tiff_transferfunction[1]),
- &(t2p->tiff_transferfunction[2]))) {
- - if((t2p->tiff_transferfunction[1] != (float*) NULL) &&
- - (t2p->tiff_transferfunction[2] != (float*) NULL) &&
- - (t2p->tiff_transferfunction[1] !=
- - t2p->tiff_transferfunction[0])) {
- + if((t2p->tiff_transferfunction[1] != (uint16*) NULL) &&
- + (t2p->tiff_transferfunction[2] != (uint16*) NULL)
- + ) {
- t2p->tiff_transferfunctioncount=3;
- } else {
- t2p->tiff_transferfunctioncount=1;
|