Java のソフトウェアまたはプログラム、または非常に大きな画像 (140MB を超える) を並べて表示する方法が必要です。ImageMagick と変換ツール Photoshop、Corel Draw、Matlab (Windows) を使用しましたが、メモリ過負荷の問題があります。ImageMagick は非常に遅く、結果は望ましくありません。ハードディスクから画像全体をロードせずに、画像のごく一部のみをメモリにロードする方法がわかりません。
4 に答える
JAI はプラットフォームに依存しており、今日では死んだプロジェクトのようです。
オープンソース プログラムのimagemagickを使用することをお勧めします。プラットフォームに依存しますが、JAI と同じプラットフォームで利用できますが、完全なコミュニティ サポートがあります。
imagemagick に関する大きな画像に関するトリックは、 convertコマンドの代わりに「 stream 」コマンドを使用することです。ストリームは、画像の関連部分のみを読み取り、抽出された部分を生データとして保存します。次に、小さな生データを jpeg として保存するために「変換」する必要があります。
サイズ 800x600 の large.jpeg からタイルを位置 0x0 から tile.jpeg に保存する例:
stream -extract 800x600+0+0 large.jpeg tile.rgb
convert -depth 8 -size 800x600 rgb:tile.rgb tile.jpeg
(Windows で実行する場合は、「convert」という名前の Windows コマンドがあるため、必ず ImageMagick の convert.exe を使用してください。)
TIFF 画像のみを操作する場合は、apache Sanselanが適切な選択になる可能性があります。これは純粋な Java 画像処理ライブラリです。また、JAI には TIFF 用のプラットフォームに依存しないコーデックが含まれているようです。
ネイティブ コードを使用する場合、libjeg などのライブラリを使用すると、画像へのスキャンライン アクセスが可能になります。一度に最大で 16 スキャンラインをロードする必要があります。
Java Advanced Imaging (JAI) API を調べる必要があります。これは、大きな画像を並べて表示するためのすぐに使えるサポートを提供します。これはやや複雑な API であり、ドキュメントは少しまばらですが、1 枚あたり約 60 mb の非常に背の高い (しかし狭い) 画像を表示するプロジェクトで使用しました。
開始するためのいくつかのリンクを次に示します。
Java ではありませんが、Inter Performance Primitives (IPP) には、タイルで動作する画像操作用の一連の関数があります。おそらく、これらの関数を Java からインターフェースすることができます。