複数ページのカラーtiffファイルをC#でac#CompressionCCITT3tiffに変換しようとしています。すべてのピクセルが1ビットであることを確認する必要があることに気付きました。私はこれの有用な例をオンラインで見つけませんでした。
4 に答える
コーディングに入る前に、最初に tiff およびイメージ ユーティリティを使用して目的の結果を試すことをお勧めします。VIPSは便利なツールであることがわかりました。次のオプションは、LibTIFF で何ができるかを調べることです。c# を使用して、無料のLibTiff.NETで良い結果が得られました ( stackoverflowも参照してください)。マイレージは異なる場合がありますが、GDI tiff 機能には非常に失望しました (欠落している 16 ビット グレースケールが必要です)。また、LibTiffユーティリティを使用することもできます (つまり、http://www.libtiff.org/man/tiffcp.1.htmlを参照してください) 。
ポン引きの免責事項: 私は、.NET イメージング ソフトウェアを作成する会社であるAtalasoftで働いています。
dotImageを使用すると、このタスクは次のようになります。
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);
}
}
ボブ・パウエルの例は、それが行く限り良いですが、いくつかの問題があります。そのうちの少なくとも 1 つは、単純なしきい値を使用していることです。これは、速度が必要で、実際に出力が何であるかを気にしない場合に最適です。入力ドメインのように見えるか、実際にはすでにかなり白黒であるようなものです-色で表されているだけです. 二値化は難しい問題です。利用可能な情報を 24 分の 1 に減らすことが課題の場合、正しい情報を保持し、残りをどのように捨てるかが課題になります。DotImage には、2 値化のための 6 つの異なるツール (IIRC) があります。私の観点からすると、SimpleThreshold はバレルの底です。
CCITT3 と CCITT4 は色をサポートしていないため、この変換が必要です (私の記憶が正しければ)。
上記のコードを見たところ、すべてのピクセルを手動ロジックで変換しているように見えました。
これはあなたのために働きますか?
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)
'新しいビットマップでやりたいことをする(保存など)
..。
注:選択できるピクセルフォーマットはたくさんあります。