TIFFWriteScanline работает в Windows и Linux, но не работает на Mac
Обновлен вопрос:
Я использую libtiff3.9.4 для чтения и записи файлов TIFF в c ++ на mac 10.6.4.Мой проект написан, чтобы быть переносимым и работает без проблем на обоих 32-битных Windows или Ubuntu 64-битных.Но на Mac функция Libtiff TIFFWriteScanline всегда дает сбой (она возвращает! = 1).Файл TIFF создан, но в нем нет содержимого.Я могу читать сжатые изображения LZW, но не могу их написать.Кроме того, программа также работает с изображениями CCITT Group4 в Windows и Linux, но чтение macline не удается на Mac.
Я безуспешно пробовал и libtiff3.8.2, и libtiff4.0.0beta6.Есть идеи, почему libtiff не будет писать скан-линии на Mac, когда он отлично работает на Linux?
Код:
// 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);