TIFFWriteScanline 在 Windows 和 Linux 上工作,但在 Mac 上失败
更新的问题:
我使用 libtiff3.9.4 在 mac 10.6.4 上用 c++ 读写 TIFF 文件。我的项目被编写为可移植的,并且在 Windows 32 位和 Ubuntu 64 位上都可以正常运行。但是在 Mac 上,Libtiff 函数 TIFFWriteScanline 总是失败(它返回!= 1)。TIFF 文件已创建,但没有任何内容。我能够读取 LZW 压缩图像,但无法写入。此外,该程序还适用于 Windows 和 linux 上的 CCITT Group4 图像,但在 mac 上读取扫描线失败。
我已经尝试了 libtiff3.8.2 和 libtiff4.0.0beta6 没有任何运气。
有什么想法为什么 libtiff 在 Linux 上运行良好时不会在 Mac 上编写扫描线?
代码:
// 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);