1

我的将多页 TIFF 转换为 PDF 的程序不再在 Windows 7 下运行。该程序包含遍历 TIFF 页面的代码,将每个页面转换为具有 CCITT Group4 压缩的 TIFF 并将位图数据插入生成的 PDF文件。

转换通过以下方式完成(c#):

 ImageCodecInfo tiffCodecInfo = GetEncoderInfo("image/tiff");
 EncoderParameters myEncoderParameters = new EncoderParameters(2);

 // Save the bitmap as a TIFF file with CCITT group4 compression.       
 myEncoderParameters.Param[0] = new EncoderParameter System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue..CompressionCCITT4);
 myEncoderParameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.ColorDepth, 1L);
 image.Save(source, tiffCodecInfo, myEncoderParameters);

似乎 GDI+ 的行为在 Windows 7 中发生了变化:生成的 CCITT 位图数据不再编码在单个条带中。因此,我无法在我的 PDF 文件中使用此位图数据。

问题:有人知道我如何告诉 GDI+ 将位图数据编码在一个条带中吗?

4

2 回答 2

1

简短的回答是:如果您想继续使用 GDI+(或其 .NET 对应物System.Drawing.Imaging),您将受到它的限制。这是因为 Microsoft 控制其实施,并且他们决定不实施某些功能或自定义点或以特定方式执行某些任务。

因此,我对此的回答是使用替代方法,例如 Windows Imaging Component(WIC,或其 .NET 对应物System.Windows.Media.Imaging,可在 PresentationCore 中找到)。

请注意,WIC 的 .NET 实现(包装器)存在一些严重问题,例如不是完全线程安全的。(对于爱好和消费者应用程序来说可能就足够了,而不是生产级服务器端应用程序。)

这是我建议为 TIFF 使用不依赖于 PresentationCore 的 .NET 库的原因之一。

http://bitmiracle.com/libtiff/

另请参阅: 使用 C# 中的 LibTiff(访问平铺的 TIFF 图像)

于 2010-06-30T08:34:35.077 回答
1

我收到了微软的答复:

是的,在 Windows 7 中,我们对 TIFF CODEC 进行了大量工作。其中一项工作是支持多个条带中的解码和编码。不幸的是,没有办法控制编码器输出的条带的数量。

于 2009-08-18T07:13:40.370 回答