【发布时间】: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