2011-12-20 5 views
2

これは可能ですか、またはWPFを使用する必要がありますか。大きな(2 GB)Tiffイメージの一部をWinformアプリケーションに表示しようとしています

Graphics g = e.Graphics; 
Bitmap b = new Bitmap(Image.FromFile(@"W:\ILHSR_Merged_2011\compressed\overviews\ILHSR11_0405-101-1.tif")); 
g.DrawImage(b, 10, 10, 350, 300); 

しかし:私は

私はこのような何かをやってみました...今私は、TIFFファイルを読み込み、それのサブセクションを表示する必要がある、Winformsのに新しいですし、夫婦簡単なアプリケーションを作成しました私は記憶の例外から出る。誰かが私に何らかの読書を指すことができますか、これは単にWPFで開発すべきものです。

+0

、私は今、この権利で探しています:http://bitmiracle.com/ libtiff / – stereotypeaura

答えて

4

libTiffを使用して独自のTIFFローダーを実装する必要があると思います。

TIFFイメージフォーマットでは、画像データをタイルに格納できます。 LibTiffでは、単一のタイルを読み込むことができます。この方法で、画像の一部のみを表示することができます(TIFF全体をデコードせずに、大きすぎることがあります)。

残念ながら、私は.NETイメージングがそのTIFF機能をサポートしているとは思いません。私の提案は、libTiffをC++/CLIで書かれたライブラリにラップし、アプリケーションに統合することです。

(原因コメント:いくつかの既存のライブラリは、すでにlibtiffに包まれ、そしてアプリケーションとうまくそのインタフェースが一致していればさらに良い)

+1

ガッチャで探しています – stereotypeaura

2

あなたはタイル張りのTIFファイルを使用することを検討して、パーツを表示する必要がある場合、および可能性も画像ピラミッド(作成/使用方法の背景情報については、TIF pyramidを参照)tifファイルこれらはすべてLibTiffで読むことができます。LibTiff.NET

これはもちろん、実行頻度によって異なります。私の経験では、ファイル自体がタイル化されていない限り、非常に大きなビットマップは32ビット版のWindows版では正しく表示できません。私はLibTiff.NET用のラッパーを作っています.LibTiff.NETは、タイル化されていない(圧縮されていない、またはラインベースの)ファイルに対してもタイルアクセスを許可します。もちろん、アクセスは遅くなります。表示されている行全体を読む必要があります。応答時間は、ギガピクセル画像では妥当であった。

BitMiracle LibTiff.NET以前の投稿/コメントに記載されています。How to implement pan/zoom on gigapixel bitmaps?How to implement pan/zoom on gigapixel bitmaps?を参照してください。 LibTiffのネイティブなC#実装であり、ラッパークラスよりも扱いが簡単です(C#アプリケーションで扱われるアンマネージメモリブロックがないため)。

[編集] TIFのピラミッド画像のドキュメントへのリンクを追加しました[/編集]

私はbitmiracle libtiff.net今
関連する問題