| AWARE [SYSTEMS] | Imaging expertise for the Delphi developer | |||||||
![]() |
TIFF and LibTiff Mailing List Archive | |||||||
LibTiff Mailing List
TIFF and LibTiff Mailing List Archive Contact
The TIFF Mailing List Homepage |
Thread2010.08.23 08:18 "Re: TIFFWriteScanline works on Windows and Linux but fails on Mac", by <molholm@gmail.com>I have narrowed down my problem a bit, first I found that the
following is needed on Mac:
TIFFSetField(tiffImage, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
Even though the tif spec. clearly stats that: "If SamplesPerPixel is
1, PlanarConfiguration is irrelevant, and need not be included."
Futhermore, i'm now able to save my image correct if I do not use
compression. But I needed LWZ compression, any ideas why
TIFFSetField(tiffImage, TIFFTAG_COMPRESSION, COMPRESSION_LZW); make
TIFFWriteScanline fail?
2010/8/20 Dennis Mølhom Hansen <molholm@gmail.com>:
> I use libtiff3.9.4 for reading and writing TIFF files in c++ on mac
> 10.6.4. My project is written to be portable and runs without any
> issues on both Windows 32-bit og Ubuntu 64-bit. But on the mac the
> Libtiff function TIFFWriteScanline always fails (it returns != 1). The
> TIFF file is created, but it does not have any contents. I'am able to
> read the LZW compressed images but i'm not able to write it.
> Furthermore the program also works for CCITT Group4 images on windows
> and linux, but read scanline fails on the mac.
>
> I have tried both libtiff3.8.2 and libtiff4.0.0beta6 without any luck.
>
> Any ideas why libtiff won't write scanlines on the mac when it works
> fine on linux?
>
> Code:
>
> // set baseline tags
> TIFFSetField(tiffImage, TIFFTAG_IMAGEWIDTH, 7368);
> TIFFSetField(tiffImage, TIFFTAG_IMAGELENGTH, 4757);
> TIFFSetField(tiffImage, TIFFTAG_BITSPERSAMPLE, 8);
> TIFFSetField(tiffImage, TIFFTAG_SAMPLESPERPIXEL, 1);
> TIFFSetField(tiffImage, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
> TIFFSetField(tiffImage, TIFFTAG_COMPRESSION, COMPRESSION_LZW);
> TIFFSetField(tiffImage, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
> TIFFSetField(tiffImage, TIFFTAG_THRESHHOLDING, 1);
> TIFFSetField(tiffImage, TIFFTAG_XRESOLUTION, 400;
> TIFFSetField(tiffImage, TIFFTAG_YRESOLUTION, 400);
> TIFFSetField(tiffImage, TIFFTAG_RESOLUTIONUNIT, 2);
>
> uint32 rowsPerStrip;
> rowsPerStrip = tiffData->height;
> rowsPerStrip = TIFFDefaultStripSize(tiffImage, rowsPerStrip);
> TIFFSetField(tiffImage, TIFFTAG_ROWSPERSTRIP, rowsPerStrip);
> TIFFSetupStrips(tiffImage);
>
> // row buffer
> scanlineSize = TIFFScanlineSize(tiffImage);
> scanline = (unsigned char*) _TIFFmalloc(scanlineSize);
>
> // write image
> for (int i = 0; i < iplImage->height; i++)
> {
> memcpy(scanline, iplImage->imageData + iplImage->widthStep*i, scanlineSize);
> if(TIFFWriteScanline(tiffImage, scanline, i, 0) != 1){
> //Error
> }
> }
>
> // clean up
> _TIFFfree(scanline);
>
> Regards,
> Dennis
>
|
|||||||