質問
C# でマルチページのカラー tiff ファイルを c# CompressionCCITT3 tiff に変換しようとしています。すべてのピクセルが 1 ビットであることを確認する必要があることがわかりました。これに関する有用な例がオンラインで見つかりませんでした。
解決
チェックアウト: http://bobpowell.net/onebit.htm
CCITT3 と CCITT4 はカラーをサポートしていないため、この変換が必要です (私の記憶が正しければ)。
他のヒント
ポンピングの免責事項:私はのために働いています アタラソフト, .NET イメージング ソフトウェアを製造する会社です。
使用する ドットイメージ, 、このタスクは次のようになります。
FileSystemImageSource source = new FileSystemImageSource("path-to-your-file.tif", true); // true = loop over all frames
// tiff encoder will auto-select an appropriate compression - CCITT4 for 1 bit.
TiffEncoder encoder = new TiffEncoder();
encoder.Append = true;
// DynamicThresholdCommand is very good for documents. For pictures, use DitherCommand
DynamicThresholdCommand threshold = new DynamicThresholdCommand();
using (FileStream outstm = new FileStream("path-to-output.tif", FileMode.Create)) {
while (source.HasMoreImages()) {
AtalaImage image = source.AcquireNext();
AtalaImage finalImage = image;
// convert when needed.
if (image.PixelFormat != PixelFormat.Pixel1bppIndexed) {
finalImage = threshold.Apply().Image;
}
encoder.Save(outstm, finalImage, null);
if (finalImage != image) {
finalImage.Dispose();
}
source.Release(image);
}
}
Bob Powell の例は、その点では優れていますが、多くの問題があります。特に、単純なしきい値を使用していることが挙げられます。これは、スピードを求め、実際に出力を気にしない場合に最適です。のように見えるか、入力ドメインがすでにほぼ白黒になっており、カラーで表現されているだけです。二値化は難しい問題です。利用可能な情報を 24 分の 1 に減らすことがタスクの場合、適切な情報をどのように保持し、残りを廃棄するかは課題です。DotImage には、二値化用の 6 つの異なるツール (IIRC) があります。私の観点から見ると、SimpleThreshold は樽の底にあります。
コーディングに入る前に、最初に tiff および image ユーティリティを使用して望ましい結果を実験することをお勧めします。見つけました VIP 便利なツールになるように。次のオプションは、LibTIFF で何ができるかを調べることです。無料でも良い結果が出ました リブティフ.NET C# を使用する (こちらも参照) スタックオーバーフロー)。使用状況は異なるかもしれませんが、GDI tiff 機能には非常にがっかりしました (欠落している 16 ビット グレースケールが必要です)。また、 リブティフ ユーティリティ(つまり、見る http://www.libtiff.org/man/tiffcp.1.html)
上記のコードを見ると、手動ロジックですべてのピクセルを変換しているように見えました。
これはあなたにも効果があるでしょうか?
System.Drawing.Imaging をインポートします
'カラーtifファイルを取得します
Dim bmpColorTIF As New Bitmap("C:\color.tif")
'TIF の領域を選択します (すべてのフレームを取得します)
Dim rectColorTIF As New Rectangle(0, 0, bmpColorTIF.Width, bmpColorTIF.Height )
' 長方形を 1 ビット カラー tif としてクローンします
Dim bmpBlackWhiteTIF As Bitmap = bmpColorTIF.Clone(rectColorTIF, PixelFormat.Format1bppIndexed)
' 新しいビットマップで必要なことを実行します (保存など)
...
注記:選択できるピクセル形式はたくさんあります。