2010-08-16 4 views
0
TIFFWriteScanline은 Windows 및 Linux에서 작동하지만 맥

는 Mac에서 Libtiff를 사용하여 TIFF 파일을 쓸 수 없습니다

에 업데이트 된 질문을 실패

:

내가 맥 에 읽기 libtiff3.9.4 및 C++에서 TIFF 파일을 작성을 사용 10.6.4. 내 프로젝트는 이식성이 있도록 작성되었으며 Windows 32 비트 및 우분투 64 비트 모두에서 문제없이 실행됩니다. 하지만 맥에서는 Libtiff 함수 TIFFWriteScanline은 항상 실패합니다 (! = 1을 반환합니다). TIFF 파일이 생성되었지만 내용이 없습니다. 나는 수 LZW 압축 된 이미지를 읽을 수 있지만 그것을 쓸 수 없습니다. 또한이 프로그램은 창 과 linux에서 CCITT Group4 이미지에 대해 작동하지만 읽기 스캔 라인은 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); 
+0

문제를보기 위해 처음부터 코드를 작성할 필요가 없도록 코드를 게시 할 수 있습니까? – Yuji

답변

1

나는 오래 전에 LibTiff 메일 링리스트에이 문제를 이동,하지만 난 여기에 대답을하는 것을 잊었다 그리고 내 프로그램이 실패했을 때 아무런 변화가 나타나지 않는 것으로 나타났습니다. 몇 시간 동안 검색 한 결과 OpenCV (libhighgui.dylib)의 내장 Libtiff 라이브러리가 내 두통의 원인이라는 것을 알았습니다. OpenCV는 Libtiff를 사용하지만, Libtiff의 모든 기능을 제공하지 않기 때문에 버전을 사용하지 않습니다. I Libtiff를 사용하지 않고 OpenCV2.1.0을 다시 설치하면 문제가 발생합니다 ( 은 포함 된 종속성의 순서 일 수 있습니다). 은 문제를 일으킬 수 있습니다.

이제 LWZ 압축 이미지를 작성할 수 있습니다. 자세한 내용은 LibTiff 메일 링리스트를 참조하십시오.

1

그것은 당신이 제공 한 정보와 이야기하기 어렵다,하지만 내 추측이 사용중인 특정 출력 형식을 지원하지 않고 libtiff 컴파일 된 것입니다.

또한 TIFFWriteScanline이 -1을 반환하면 사용자 자신의 오류 처리기를 대체하지 않으면 오류 메시지가 나타납니다. 이것은 무슨 일이 일어나고 있는지에 대한 유용한 단서가되어야합니다. 나는의 printf를 삽입하고 Libtiff 코드에서 일부 TiffError 메시지를 수정

: 그래서 여기 있습니다,

관련 문제