TIFFWriteScanline fonctionne sous Windows et Linux, mais échoue sur Macne peut pas écrire des fichiers TIFF à l'aide LibTIFF sur Mac
question Mise à jour:
J'utilise libtiff3.9.4 pour lire et écrire des fichiers TIFF dans C++ sur mac 10.6.4. Mon projet est écrit pour être portable et fonctionne sans aucun problème sur Windows 32 bits et Ubuntu 64 bits. Mais sur le mac la fonction Libtiff TIFFWriteScanline échoue toujours (elle renvoie! = 1). Le fichier TIFF est créé, mais il n'a aucun contenu. Je suis capable de lire les images compressées LZW mais je ne suis pas capable de l'écrire. En outre, le programme fonctionne également pour les images CCITT Group4 sur Windows et Linux, mais lire scanline échoue sur le mac.
J'ai essayé à la fois libtiff3.8.2 et libtiff4.0.0beta6 sans aucune chance.
Des idées pour lesquelles libtiff n'écrira pas scanlines sur le mac quand il fonctionne bien sur 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);
Pourriez-vous poster votre code afin que nous ne devions pas le code à partir de zéro pour voir le problème? – Yuji