1

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);
4

2 回答 2

1

很难用你提供的信息来判断,但我最好的猜测是你编译的 libtiff 不支持你正在使用的特定输出格式。

此外,如果 TIFFWriteScanline 返回 -1,除非您已替换自己的错误处理程序,否则应该有一条错误消息。这应该是关于正在发生的事情的有用线索。

于 2011-04-17T06:08:43.857 回答
1

很久以前我把这个问题移到了 LibTiff 邮件列表,但我忘了在这里给出答案,所以这里是:

我在 Libtiff 代码中插入了 printf 并修改了一些 TiffError 消息,结果当我的程序失败时,这些更改并没有显示在任何地方。在搜索了几个小时后,我发现 OpenCV 中的内置 Libtiff 库(libhighgui.dylib)是我头痛的原因。我知道 OpenCV 使用 Libtiff,但我不使用内置版本,因为它不提供 Libtiff 的全部功能。我在没有 Libtiff 的情况下重新安装了 OpenCV2.1.0,它解决了这个问题(它可能只是导致问题的包含的依赖项的顺序)。

我现在可以编写 LWZ 压缩图像了。有关更多详细信息,请参阅 LibTiff 邮件列表。

于 2012-08-07T07:15:56.720 回答