我有一个VB6应用程序(使用IMGSCAN和IMGEDIT conrols)从HP扫描仪通过TWAIN扫描图像,这会产生多旧的jpeg压缩tiff。现在当我从同一个VB6应用程序通过TWAIN访问新的柯达扫描仪i2600时,它会挂起。
所以现在我正在尝试编写一个可执行文件,它只会扫描并创建一个多页Tiff文件,可以在我的VB6应用程序中访问(通过IMGEDIT conrol)进行查看。
我尝试使用下面帖子中的C#代码创建带有旧JPEG压缩的多页tiff文件:
我使用压缩为6来实现旧的JPEG压缩。 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。
旧Tiff文件
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 :(得分:0)
很可能你不正确地创建了你的TIFF。
重新检查IMAGEWIDTH
,SAMPLESPERPIXEL
和BITSPERSAMPLE
值。其中一些可能是错误的,这就是你得到扭曲图像的原因。
您的输出图像中没有JPEG***
个标签,因为您无法使用libtiff创建OldJPEG编码的图像(根本没有OldJpeg编码器,只有解码器存在)。你不应该创建这样的图像,因为OldJPEG很久很久以前就被弃用了。