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);

Windows 7 では GDI+ の動作が変更されたようです。結果の CCITT ビットマップ データは、単一のストリップにエンコードされなくなりました。このため、PDF ファイルでこのビットマップ データを使用できません。

質問: ビットマップ データを 1 つのストリップにエンコードするように GDI+ に指示する方法を知っている人はいますか?

4

2 に答える 2

1

簡単に言うと、GDI +(またはそれに対応する.NET)を使い続けたい場合は、System.Drawing.Imagingその制限が適用されます。これは、Microsoftがその実装を管理しており、特定の機能やカスタマイズポイントを実装しない、または特定のタスクを特定の方法で実行しないことがMicrosoftの決定であるためです。

したがって、それに対する私の答えは、Windows Imaging Component(WIC、またはPresentationCoreにある対応する.NET)などの代替手段を使用することですSystem.Windows.Media.Imaging

WICの.NET実装(ラッパー)には、完全にスレッドセーフではないなど、いくつかの重大な問題があることに注意してください。(本番グレードのサーバー側アプリケーションではなく、趣味や消費者向けのアプリケーションには十分な場合があります。)

これが、PresentationCoreに依存しないTIFF用の.NETライブラリを使用することをお勧めする理由の1つです。

http://bitmiracle.com/libtiff/

参照: C#からのLibTiffの使用(タイル化されたTIFF画像にアクセスするため)

于 2010-06-30T08:34:35.077 に答える
1

Microsoft から回答を受け取りました。

はい、Windows 7 では、TIFF CODEC に対して広範な作業を行いました。作業の 1 つは、複数のストリップでのデコードとエンコードをサポートすることでした。残念ながら、エンコーダーが出力するストリップの数を制御する方法はありません。

于 2009-08-18T07:13:40.370 に答える