[2010 年 1 月 14 日の大幅な編集]
ティフがタイル化されていない場合、タイルについてのあなたの言及に少し混乱しました。
タイル/ピラミッド TIFF 画像を使用します。VIPSで作成しました
vips im_vips2tiff source_image output_image.tif:none,tile:256x256,pyramid
私はあなたがこれを行うことができると思います:
vips im_vips2tiff source_image output_image.tif:none,tile:256x256,flat
タイル サイズを試してみることをお勧めします。その後、TIFFReadEncodedTile を使用して読み取ることができます。
ズームイン/ズームアウトする必要がある場合は、ピラミッド型 tiff を使用したマルチ解像度ストレージの方がはるかに高速です。これを使用して、粗い画像の直後に詳細な画像を表示することもできます。
(適切なサイズの) タイル ストレージに切り替えた後 (これにより、ランダム アクセスのパフォーマンスが大幅に向上します!)、ボトルネックはディスク IO になります。ファイルの読み取りは、順番に読み取るとはるかに高速になります。ここでは、 mmapping が解決策になる場合があります。
いくつかの便利なリンク:
VIPS
IIPImage
LibTiff.NET stackoverflow
VIPS は、単なる読み取り/書き込み以上のことができる画像処理ライブラリです。独自の非常に効率的な内部形式があります。アルゴリズムに関する優れたドキュメントがあります。1 つは、処理をファイル システムから分離することで、タイルをキャッシュできるようにすることです。
IIPImage は、マルチズーム Web サーバー/ブラウザー ライブラリです。ドキュメントは、マルチ解像度イメージング (Google マップなど) に関する非常に優れた情報源であることがわかりました。
このページのもう 1 つのソリューションは、mmap を使用したもので、「小さな」ファイルに対してのみ有効です。私は 32 ビットの境界に頻繁にぶつかりました。一般に、32 ビット OS (4 GB の RAM がインストールされている) で 1 GB のメモリ チャンクを割り当てると失敗します。これは、1 回または 2 回のアプリケーションの実行後に仮想メモリでさえ断片化されるためです。それでも、画像の一部または全体をキャッシュするのに十分なメモリがあります。より多くのメモリ = より多くのパフォーマンス。