【问题标题】:Can't write TIFF files using Libtiff on Mac无法在 Mac 上使用 Libtiff 写入 TIFF 文件
【发布时间】:2013-07-05 19:04:03
【问题描述】:

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 上写入扫描线的任何想法 在 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);

【问题讨论】:

  • 能否发布您的代码,这样我们就不必从头开始编写代码来查看问题?

标签: c++ macos portability libtiff


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 2012-07-11
      • 2022-09-29
      相关资源
      最近更新 更多