Ross,
thanks for pointing out this behaviour. I will change this in my code.
This message may be helpfull to the lcms list too. Therefore I crosspost.
As about libtiff fax coding I must pass. I am coming from the float side,
working on HDR imagery.
kind regards
Kai-Uwe Behrmann
+ imaging development / panoramas
+ color management
+ email: [EMAIL PROTECTED]
Am 04.11.04, 00:38 -0800 schrieb Ross A. Finlayson:
>
>
> On Thu, 4 Nov 2004, Kai-Uwe Behrmann wrote:
>
> > Thanks, have found it. Testing of the pointers for zero should do.
> >
> > if (TIFFGetField (tiff, TIFFTAG_TRANSFERFUNCTION,
> > &r_uint16, &g_uint16, &b_uin16) )
> > if (r_uin16)
> > // there is at least one kurve
> > if (r_uint16 && g_uin16 && b_uint16)
> > // there are 3 curves
> >
> > regards
> > Kai-Uwe Behrmann
> > + imaging development / panoramas
> > + color management
> > + email: [EMAIL PROTECTED]
> >
> >
> > Am 04.11.04, 07:42 +0100 schrieb Kai-Uwe Behrmann:
> >
> > > Hi,
> > >
> > > How can I determine the size of TIFFTAG_TRANSFERFUNCTION to calculate
> > > the number of curves used by the tag. As stated in the spec 1 and 3 curves
> > > are both possible for RGB. For GRAY I would expect 1 curve is allways ok.
> > >
> > > man TIFFGetField only says:
> > > TIFFTAG_TRANSFERFUNCTION 1 or 3- uint16**1<<BitsPerSample entry arrays
> > >
> > > Just to be shure, I dont exceede memory.
> > >
> > > regards
> > > Kai-Uwe Behrmann
>
> Hi Kai-Uwe,
>
> I'm uncertain of the answer for that. I think instead you should compare
> the pointers to each other because if there is only one transfer function
> that each of the three pointers is set to the same value. So tiff2pdf
> compares the first to the second pointer to see if they are different. If
> they are the same, then there is only one transfer function, otherwise,
> three. I looked at the source code where that is done before I coded
> that.
>
> Here is some copied code, from tif_dirread.c:
>
> case TIFFTAG_TRANSFERFUNCTION:
> /*
> * TransferFunction can have either 1x or 3x data
> * values; Colormap can have only 3x items.
> */
> v = 1L<<td->td_bitspersample;
> if (dp->tdir_tag == TIFFTAG_COLORMAP ||
> dp->tdir_count != (uint32) v) {
> if (!CheckDirCount(tif, dp,
> (uint32)(3*v)))
> break;
> }
> v *= sizeof (uint16);
> cp = CheckMalloc(tif, dp->tdir_count, sizeof
> (uint16),
> "to read \"TransferFunction\" tag");
> if (cp != NULL) {
> if (TIFFFetchData(tif, dp, cp)) {
> /*
> * This deals with there being
> only
> * one array to apply to all
> samples.
> */
> uint32 c =
> (uint32)1 <<
> td->td_bitspersample;
> if (dp->tdir_count == c)
> v = 0;
> TIFFSetField(tif, dp->tdir_tag,
> cp, cp+v, cp+2*v);
> }
> _TIFFfree(cp);
> }
> break;
>
> It sets the pointers to cp, cp+v, and cp+2*v. So, if there is only one
> transfer function, then each pointer is set to cp, where v==0. So, if cp
> != cp+v, then there are multiple transfer functions for the multiple
> channels, to get the transfer function count.
>
> The answer of one for all or three separate transfer functions is whether
> r_uint16 == g_uint16 in your example. Is that not so?
>
> Then, I have a question, it is off-topic, but I wonder if the fax codec
> supports uncompressed mode anymore. I tinker upon a fax codec, and want
> to understand libtiff's fax compression codec. Are you familiar with any
> limits of the libtiff fax codec?
>
> Warm regards,
>
> Ross F.
>
>
> _______________________________________________
> Tiff mailing list
> [EMAIL PROTECTED]
> http://xserve.flids.com/mailman/listinfo/tiff
>
Mit freundlichen Gr��en
Kai-Uwe Behrmann
+ Bildprogrammierung / Panoramen
+ Farbmanagement
+ email: [EMAIL PROTECTED]
-------------------------------------------------------
This SF.Net email is sponsored by:
Sybase ASE Linux Express Edition - download now for FREE
LinuxWorld Reader's Choice Award Winner for best database on Linux.
http://ads.osdn.com/?ad_idU88&alloc_id065&op=click
_______________________________________________
Lcms-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/lcms-user