4

.NETで大きなTIFF画像を切り抜く方法を見つけようとしています。具体的には、ジオリファレンス情報をそれ自体に埋め込むことができるTIFFであるGeoTiffでこの操作を実行しようとしています。このタイプのデータセットに慣れていない人のために、それはTIFF 6.0に完全に準拠しており、通常はサイズが巨大です。ギガバイトの範囲で何度も。

このタスクを実行するために、System.Windows.Media.Imaging名前空間をいじっています。ただし、トリミングされるtiffのサイズにより、メモリ不足エラーが発生します。開始時に入力画像をメモリに読み込まずに画像をトリミングする方法を示す情報を誰かに教えてもらえますか?

参考までに-GDALがこのタスクを実行できる以上の能力があることを十分に認識しています。ただし、不必要な詳細に立ち入ることなく、いくつかの理由から、現時点ではアプリでGDALをデプロイすることはできません。したがって、ネイティブの.NETクラスでこれを実行したいと考えています。ただし、他に役立つ可能性のあるサードパーティの.NETライブラリがある場合は、私はすべての耳です。

4

3 に答える 3

3

libtiffを見てください。スキャンライン(または、画像のフォーマット方法である場合はストリップ)で画像をロードする必要があります。明らかに、スキャンライン全体(またはストリップ)を保持するのに十分なメモリが必要ですが、画像全体をメモリにロードするよりもはるかに実現可能です。

ライブラリには.NETバージョンがあるようで、無料でオープンソースのようです(他のアプリとは異なります)。

于 2011-02-11T04:59:45.610 に答える
1

残念ながら、組み込みのGDI +ベースのイメージング操作(内部で利用可能でSystem.DrawingありSystem.Drawing.Imaging、ある時点で完全なイメージをメモリにロードする必要があります。これは、状況によっては明らかに実行不可能です。

于 2011-02-10T16:00:05.327 に答える
1

ギガバイト範囲のTIFFを「イメージ」と見なす方法はありません。ディスク上のファイルとして扱うか、メモリにマップして、データセットであるかのように操作を実行します。

Imaging Namespaceは、このような大きなデータセット用に設計されたものではなく、画像や小さな画像などを操作するためのものです。TIFF操作ライブラリを見つけるか、ファイルレベルで機能する独自のルーチンを作成する必要があります。私が過去に使用した「libtiff」と呼ばれるオープンソースのCベースのライブラリがあります。それは良い出発点かもしれません。

(独自に作成する際に直面するいくつかの問題には、TIFFファイルにあらゆる種類の圧縮が含まれる可能性があるという事実が含まれます-地盤工学的な場合は、標準/単純な圧縮があるか、非圧縮ですか?この場合、メモリをコピーすることがほとんどの作業になります-それとTIFFディレクトリとエントリの保存。商用オプションをお探しの場合は、AtalasoftのDotImageライブラリをご覧になることをお勧めします。)

于 2011-02-10T16:01:17.437 に答える