私は、Java 2Dを使用して、30000x30000ピクセルなどの非常に大きくなる可能性のあるマトリックスを描画するアプリケーションに取り組んでいます。現時点では、BufferedImageで少し実験しましたが、このような巨大なBufferedImageを作成すると、ヒープを拡大した場合でも、メモリ不足の例外が発生します。今、私は画像をいくつかの画像/領域に分割することを考えていました。特定の領域で完了したら、それをディスクに書き込み、新しい領域/ BufferedImageを作成して、描画を続けます。私は他の人々がこれをどのように扱うかについての考えに興味があります。私はしばらくJavaを離れていたので、具体的な例を歓迎します。
2 に答える
私は、あなたのニーズに非常に適した新しい/小さなオープン ソース プロジェクトに貢献しています。
プロジェクトはGlimpseです。Java での 2D データ ビジュアライゼーションの構築を支援することを目的としており、大規模なデータ セットを適切に処理し、リアルタイムのインタラクティブ性を提供してデータを簡単に探索できるようにすることに重点を置いています。
OpenGLを利用して、テクスチャ メモリやシェーダーなどの最新の GPU のハードウェア機能を利用して、上記の目標を達成します。したがって、Java2D を使用することに設定されている場合、これは機能しません。ただし、Glimpse パネルは他の Swing コンポーネントと並べて配置できるため、既存の Swing GUI に簡単にドロップできます。まともなグラフィックカードが必要になるという唯一の注意点.
この画像は、右側のカラー スケールを介して色が動的に調整されるデータの大規模なマトリックスの例です (マトリックス データは GPU テクスチャに保存され、動的な再色はカスタム シェーダーを介して実行されます)。この例のソースはHeatMapExample.javaです。Glimpse の他の機能を使用するための出発点を提供する、このような例は他にもたくさんあります。
詳しくはglimpse.metsci.comをご覧ください。Java WebStart の例とともに、フロント ページに紹介ビデオがあります。ソースはGitHubでホストされています。
ディスク上に画像を生成したいだけの場合は、pngjを見てください。使用可能なピクセルの行をディスクに書き込むため、大きなpng 画像を問題なく生成できます。API は少し png 固有ですが、それほど複雑ではありません (使用する前に、png 画像形式の背景を少し読むと役立つ場合があります)。