TIFFWriteScanline は Windows と Linux では機能しますが、Mac では失敗します
更新された質問:
Mac 10.6.4 の c++ で TIFF ファイルを読み書きするために libtiff3.9.4 を使用しています。私のプロジェクトは移植できるように書かれており、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);