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上无法读取scanline。

我尝试了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);

最佳答案

您所提供的信息很难告诉您,但是我最大的猜测是您编译的libtiff不支持所使用的特定输出格式。

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

关于c++ - 在Mac上无法使用Libtiff写入TIFF文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3493933/

10-13 03:32