2012-11-20 4 views
1

jpeg 압축을 사용하여 다중 티파니를 얻었습니다. libtiff.net에서 jpeg 압축 파일을 읽을 수 없습니다.

나는 오류 메시지가 다음받을 libtiff.net를 통해 파일을 여는

:

JPEGPreDecode: 
JPEG strip/tile size exceeds expected dimensions, expected 1164x1, got 1164x826. 

이미지 처리가 실패합니다. 파일/디렉토리는이 태그가 : 다른 JPEG 압축 파일로

OldSubFileType (1 Short): 1 
ImageWidth (1 Long): 1164 
ImageLength (1 Long): 826 
BitsPerSample (3 Short): 8, 8, 8 
Compression (1 Short): JPEG Technote #2 
Photometric (1 Short): YCbCr 
FillOrder (1 Short): Msb2Lsb 
StripOffsets (1 Long): 224 
SamplesPerPixel (1 Short): 3 
StripByteCounts (1 Long): 109294 
XResolution (1 Rational): 200 
YResolution (1 Rational): 200 
PlanarConfig (1 Short): Contig 

나는 아무 문제도 없어. 오류가 발생하는 이유는 무엇입니까? 왜 1164x1을 기대합니까?

+0

다른 유틸리티 또는 라이브러리를 사용하여 파일을 열거 나 변환하려고 시도 했습니까? 그들은 성공 했습니까? 파일을 공유 할 수 있습니까? – Bobrovsky

답변

0

파일에 ROWSPERSTRIP 태그가 설정되어 있는지 확인하십시오.

이 태그가 없으면 JPEG 디코더는 이미지의 스트립 높이가 잘못되었다고 생각할 수 있습니다.

다른 옵션은 source code of LibTiff.Net을 다운로드하고 JpgeCodec.cs의 JPEGPreDecode 메서드 시작 부분에 중단 점을 설정하고 잘못된 점을 확인하는 것입니다. 대부분의 아마, 메소드의 다음 부분은 경고의 원인과 코덱의 오작동 :

if (segment_height > td.td_rowsperstrip) 
    segment_height = td.td_rowsperstrip; 

당신은 방법의이 부분을 변경할 수 있지만 대신 파일을 수정하는 것이 더있을 수 있습니다.

태그를 직접 추가 할 수도 있습니다 (각 디렉토리에 태그를 설정해야 함). 이미지를 열고 태그가 있는지 확인한 다음 'SetField'방법을 사용하여 태그에 올바른 값을 설정하십시오.

using (Tiff image = Tiff.Open(existingTiffName, "a")) 
{ 
    for (int i = 0; i < image.NumberOfDirectories(); i++) 
    { 
     image.SetDirectory(i); 
     ... 

     FieldValue[] value = image.GetField(TiffTag.ROWSPERSTRIP); 
     if (value == null) 
     { 
      // ROWSPERSTRIP is not set 
      image.SetField(TiffTag.ROWSPERSTRIP, heightOfTheImage); 
     } 
     ... 
    } 
} 

는 APPEND 더에서 이미지를 열 (이것에 대한 "a" 매개 변수를 사용)해야 함을 유의하시기 바랍니다.

+0

태그를 추가 할 수 있으면 해당 파일의 작성자에게 요청할 것입니다. 도움 주셔서 감사합니다. – sqltobi

+0

@sqltobi 답변에 대한 업데이트를 참조하십시오 (대체 접근법을 추가했습니다). – Bobrovsky

관련 문제