首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用旧的JPEG压缩c#创建多页Tiff

用旧的JPEG压缩c#创建多页Tiff
EN

Stack Overflow用户
提问于 2014-12-26 17:02:49
回答 1查看 1.2K关注 0票数 1

我有一个VB6应用程序(使用IMGSCAN和IMGEDIT控制)通过TWAIN从HP扫描仪扫描图像,TWAIN用旧的jpeg压缩生成多页tiff。现在,当我从同一个VB6应用程序通过TWAIN访问新的柯达扫描仪i2600时,它挂起了。

因此,现在我正在尝试编写一个可执行文件,它将只扫描并创建一个多页Tiff文件,可以在我的VB6应用程序中访问该文件(通过IMGEDIT控制)进行查看。

我试图创建多页tiff文件与旧的JPEG压缩使用C#代码发现在下面的帖子:

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

我将压缩设置为6,以实现旧的JPEG压缩。IFD:

代码语言:javascript
运行
复制
{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中)不能正确显示这些图像。所有的图像都被扭曲了。

因此,我分析了旧的tiff文件(使用vb6应用程序创建)和新文件(使用上面的设置使用c#创建)的IFD。

旧Tiff文件

代码语言:javascript
运行
复制
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文件:

代码语言:javascript
运行
复制
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

JPEGPROC、JPEGIFOFFSET、JPEGIFBYTECOUNT、JPEGRESTARTINTERVAL、JPEGQTABLES、JPEGDCTABLES、JPEGACTABLES等IFD在新文件中不可用。我猜这可能是IMGEDIT控件不能正确显示图像的原因。在生成TIFF文件时设置这些属性吗?

EN

回答 1

Stack Overflow用户

发布于 2014-12-26 18:22:52

很可能您创建的TIFF不正确。

重新检查IMAGEWIDTHSAMPLESPERPIXELBITSPERSAMPLE的值。它们中的一些可能是错误的,这就是为什么你会得到失真的图像。

您不能在输出图像中获得JPEG***标记,因为您不能使用libtiff创建OldJpeg编码的图像(根本没有OldJpeg编码器,只有解码器)。你,你不应该创建这样的图像,因为OldJPEG很久以前就被弃用了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27655000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档