2014-12-26 2 views
1

이전 IMGSCAN 및 IMGEDIT 조정 도구를 사용하는 VB6 응용 프로그램에서 이전 jpeg 압축으로 다중 페이지 tiff를 생성하는 TWAIN을 통해 HP 스캐너에서 이미지를 스캔했습니다. 이제 동일한 VB6 응용 프로그램에서 TWAIN을 통해 새 Kodak 스캐너 i2600에 액세스하면 멈 춥니 다.이전 JPEG 압축으로 다중 페이지 Tiff 만들기 C#

그래서 이제는 IMGEDIT conrol을 통해 내 VB6 응용 프로그램에서 볼 수있는 다중 페이징 Tiff 파일을 스캔하고 작성하는 실행 파일을 작성하려고합니다.

난 후 아래에있는 C# 코드를 사용하여 기존 JPEG 압축과 다중 페이지 TIFF 파일을 만들려고 :

https://stackoverflow.com/questions/14811496/tiff-with-jpeg-compression-much-larger-than-original-jpeg

내가 옛날 JPEG 압축을 달성하기 위해, 6으로 압축을 사용했다. IFD는 :

{254, 4, 1, 0}, // NewSubfileType 
{256, 4, 1, width}, // ImageWidth 
{257, 4, 1, length}, // ImageLength 
{258, 3, 3, offset}, // BitsPerSample 
{259, 3, 1, 6}, // Compression (Old JPEG) 
{262, 3, 1, 6}, //PhotometricInterpretation (YCbCr) 
{273, 4, 1, offset + 22}, // StripOffsets (offset IFH + entries + values of BitsPerSample & YResolution & XResolution) 
{277, 3, 1, 3}, // SamplesPerPixel 
{278, 4, 1, length}, // RowsPerStrip 
{279, 4, 1, (uint)jpegs[i].LongLength}, // StripByteCounts 
{282, 5, 1, offset + 6}, // XResolution (offset IFH + entries + values of BitsPerSample) 
{283, 5, 1, offset + 14}, // YResolution (offset IFH + entries + values of BitsPerSample & YResolution) 
{284, 3, 1, 1}, // PlanarConfiguration (chunky) 
{296, 3, 1, 2} // ResolutionUnit 

나는 성공적으로 멀티 페이지 TIFF 파일을 만들었습니다. 그러나 문제는 IMGEDIT 컨트롤 (VB6에서)이 이미지를 제대로 표시하지 않는다는 것입니다. 모든 이미지가 왜곡됩니다.

그래서 (위의 설정으로 C#을 사용하여 만든) 새 파일로 이전 tiff 파일 (vb6 응용 프로그램을 사용하여 작성한 파일)의 IFD를 분석했습니다.

올드 티파니

SUBFILETYPE  0 
IMAGEWIDTH 826 
IMAGELENGTH  1169 
BITSPERSAMPLE 8 
COMPRESSION  OJPEG 
PHOTOMETRIC  YCBCR 
FILLORDER MSB2LSB 
STRIPOFFSETS  System.UInt32[] 
ORIENTATION  TOPLEFT 
SAMPLESPERPIXEL  3 
ROWSPERSTRIP 8 
STRIPBYTECOUNTS  System.UInt32[] 
XRESOLUTION  100 
YRESOLUTION  100 
PLANARCONFIG  CONTIG 
RESOLUTIONUNIT INCH 
SOFTWARE  System.Byte[] 
TILEOFFSETS  System.UInt32[] 
TILEBYTECOUNTS System.UInt32[] 
JPEGPROC 1 
JPEGIFOFFSET 932 
JPEGIFBYTECOUNT  601 
JPEGRESTARTINTERVAL  0 
JPEGQTABLES  3 
JPEGDCTABLES 3 
JPEGACTABLES 3 
YCBCRSUBSAMPLING 2 

새로운 TIFF 파일을 파일 :

SUBFILETYPE 0 
IMAGEWIDTH 830 
IMAGELENGTH 1172 
BITSPERSAMPLE 8 
COMPRESSION  OJPEG 
PHOTOMETRIC  YCBCR 
**< FILLORDER field missing when comparing above>** 
STRIPOFFSETS  System.UInt32[] 
< ORIENTATION field missing when comparing above> 
SAMPLESPERPIXEL 3 
ROWSPERSTRIP 1172 
STRIPBYTECOUNTS System.UInt32[] 
XRESOLUTION  100 
YRESOLUTION  100 
PLANARCONFIG  CONTIG 
RESOLUTIONUNIT INCH 
< SOFTWARE field missing when comparing above> 
TILEOFFSETS  System.UInt32[] 
TILEBYTECOUNTS  System.UInt32[] 
< JPEGPROC field missing when comparing above> 
< JPEGIFOFFSET field missing when comparing above> 
< JPEGIFBYTECOUNT field missing when comparing above> 
< JPEGRESTARTINTERVAL field missing when comparing above> 
< JPEGQTABLES field missing when comparing above> 
< JPEGDCTABLES field missing when comparing above> 
< JPEGACTABLES field missing when comparing above> 
YCBCRSUBSAMPLING 2 

IFD의

이 JPEGPROC, JPEGIFOFFSET, JPEGIFBYTECOUNT, JPEGRESTARTINTERVAL, JPEGQTABLES, JPEGDCTABLES처럼 JPEGACTABLES 새로운 파일에 사용할 수 없었습니다. IMGEDIT 컨트롤이 이미지를 제대로 표시하지 못할 수도 있습니다. 어쨌든 TIFF 파일을 생성하는 동안 이러한 속성을 설정합니까?

+0

왜 "오래된 JPEG"압축을 사용 하시겠습니까? 사양에 결함이있어서 절대로 사용해서는 안됩니다. 새롭고 잘 정의 된 JPEG 사양을 사용하지 않는 이유는 무엇입니까? – haraldK

+0

@haraldK 클라이언트는이 VB6 응용 프로그램을 스캔에 사용합니다. 이 IMGEDIT, IMGSCAN 컨트롤은 다중 페이지 Tiff 파일의 "Old JPEG compression"만 지원합니다. 새 JPEG 압축 파일을 만들려고하면이 컨트롤이 올바른 파일로 인식하지 못합니다. –

답변

0

아마도 TIFF를 부적절하게 만들 것입니다.

IMAGEWIDTH, SAMPLESPERPIXELBITSPERSAMPLE 값을 다시 확인하십시오. 그들 중 일부는 틀릴 수도 있고 왜 그렇게 왜곡 된 이미지를 얻게됩니다.

libtiff로 OldJPEG 인코딩 이미지를 만들 수 없으므로 출력 이미지에 JPEG*** 태그가 표시되지 않습니다 (단순히 OldJpeg 인코더가없고 디코더 만 있음). OldJPEG는 오랫동안 오래 오래 사용되지 않으므로 이러한 이미지를 만들면 안됩니다.

+0

위의 새로운 tiff 파일의 IFD를 업데이트했습니다. JPEG 태그를 제외한 이전 파일 값과 거의 동일합니다. 새로운 tiff는 Microsoft Picture Manager, Irfan viwer 등에서 볼 수 있습니다. 문제는 IMGEDIT 컨트롤을 통해 보려고 할 때만 발생합니다. 나는 IMGEDIT 제어 (아주 오래된 것)와 관련하여 문제가 있는지 알지 못합니다. OldJPEG로 인코딩 된 TIFF 이미지를 만들 수있는 다른 방법이 있습니까? –

관련 문제