2008-09-04 26 views
0

私は複数ページの色のTIFFファイルをC#のc#CompressionCCITT3 tiffに変換しようとしています。私は、すべてのピクセルが1ビットであることを確認する必要があることを認識しています。このオンラインの便利な例は見つけられていません。TIFファイルを圧縮する

答えて

1

チェックアウト:http://bobpowell.net/onebit.htm

あなたは(私は右覚えていれば)カラーをサポートしていないCCITT3とCCITT4として、この変換を必要とします。

0

私は上記のコードを見て、手動ロジックですべてのピクセルを変換していたように見えました。

これはあなたのために働くでしょうか?

輸入System.Drawing.Imaging

'新しいビットマップとして

ファイル

TIF色を取得します。Dim bmpColorTIF( "C:\ color.tif")

' のエリアを選択新しい矩形として

薄暗いrectColorTIF(すべてのフレームを取得します)TIF(0、0、bmpColorTIF.Width、bmpColorTIF.Height)

「は1ビットCOLとして長方形のクローンを作成しましたまたは

ビットマップ= bmpColorTIF.Clone(rectColorTIF、PixelFormat.Format1bppIndexed)として暗いbmpBlackWhiteTIF

TIF「あなたは新しいビットマップ(など、保存)

...

でやりたいです注:そこから選択するピクセル形式のトンがあります。

1

Pimping免責事項:私はAtalasoft、.NETイメージングソフトウェアを作成する会社で働いています。 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まで減らすことがあなたの仕事である場合、正しい情報を保持し、残りの部分を捨てる方法は難しいです。 DotImageには、2値化のための6種類のツール(IIRC)があります。 SimpleThresholdは私の視点から見るとバレルの一番下にあります。

1

まず、コーディングを始める前に、tiffとimageユーティリティを使用して望む結果を試してみることをお勧めします。私はVIPSが便利なツールであることを発見しました。次のオプションは、LibTIFFが何をすることができるかを調べることです。私は無料のLibTiff.NETを使用して良い結果を得ました.C#を使用してください(stackoverflowも参照してください)。私は非常にGDIのtiff機能に失望していましたが、あなたの人件費は変わるかもしれません(私は16ビットグレースケールが不足している必要があります)。 また、LibTiffユーティリティ(http://www.libtiff.org/man/tiffcp.1.htmlを参照)を使用することもできます。

関連する問題