2017-07-22 20 views
1

私は、プロジェクトを作業中です。スターカタログを視覚化し、印刷可能なbmpファイルを作成します。 1200 dpiの解像度で24 x 24の画像を印刷したい場合は、28800 * 28800、およそ2.32 Gbになります。どのようにJavaで巨大なbmpファイルを保存するには?

一般に、bmpファイルを作成するときは、BufferedImageを作成し、のメソッドをsetRGBメソッドでグラフ化し、ImageIOでbmpファイルとして保存します。 書き込み

しかし、自分のプログラムを配布しようとすると、エンドユーザーは空きRAMが足りない可能性があり、OutOfMemoryErrorが発生します。

イメージのすべてのピクセルをRAMに保存しないようにする方法はありますか?画像を水平にいくつかのバンドにカットし、1つ1つのbmpファイルに1つずつ保存すると、保存されたバッファーに乗ることができるのですばらしいことになります。同様の

何かが次のようになります。

私はImageIOにし、AWTパッケージを見つける前に、私はcsvファイルとしてビットマップを保存しBitmapクラスを書いて、それをレンダリングする外部ソフトウェアを使用しています。それはtoStringメソッドを持っていて、実際にディスクに保存する代わりに、このメソッドを使用してcsvの内容を文字列として保存します。大きなイメージを作成したいときは、fileWriterとprintWriterを作成します。イメージの水平バンドをバッファリングし、printWriterでディスクに書き込みます。次に、次のバンドをバッファリングして古いバンドを置き換え、再度printWriterで書きます。それが終了すると、私は作家を閉じて、ディスク上のcsvファイルとして完全なビットマップを持っています。

答えて

1

あなたが必要とするのは、データをメモリに完全にロードせずにイメージファイルを直接作成するコードです(通常これはタイルイメージ処理と呼ばれます)。私はそうすることができるJavaライブラリを知らないので、私の推奨はBMPファイルフォーマットを見て、手動でファイルを書き込むことです。 AFAIR BMPファイル形式はかなりシンプルです。

私はPNG出力のために類似した何かを見ました:PngXxlWriter.java

関連する問題