无法在Mac上使用Libtiff编写TIFF文件

时间:2010-08-16 14:11:16

标签: c++ macos portability libtiff

TIFFWriteScanline适用于Windows和Linux但在Mac上失败

更新了问题:

我使用libtiff3.9.4在mac上用c ++读写TIFF文件 10.6.4。我的项目是可移植的,没有任何运行 Windows 32位和Ubuntu 64位上的问题。但在Mac上 Libtiff函数TIFFWriteScanline总是失败(返回!= 1)。该 TIFF文件已创建,但它没有任何内容。我能够 阅读LZW压缩图像,但我无法写入。 此外,该程序还适用于Windows上的CCITT Group4图像 和linux,但读取扫描线在mac上失败。

我没试过libtiff3.8.2和libtiff4.0.0beta6。

为什么libtiff在mac工作时不会在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);

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

我在Libtiff中插入了printf并修改了一些TiffError消息 代码,事实证明,这些变化在任何时候都没有显示出来 我的节目失败了。在几个小时后搜索我发现了 OpenCV中的内置Libtiff库(libhighgui.dylib)就是其中的原因 我的头痛。我知道OpenCV使用Libtiff,但我没有使用内置版本 版本,因为它不提供Libtiff的全部功能。一世 重新安装没有Libtiff的OpenCV2.1.0它解决了这个问题(它 可能只是所包含的依赖项的顺序 造成麻烦)。

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