2017-07-04 8 views
0

非常に大きな画像をJavaで作成する必要があり、これまではjava.awt.image.BufferedImageクラスを使用してきました。しかし、このクラスは2^31ピクセルを超えることができないので、intを持つピクセルを格納しているようです。私は小さな画像を作成して一緒にステッチングすることを考えましたが、Adobe Photoshopのような写真編集者は、どの次元でも30,000ピクセルを超える写真をインポートすることはできません。2^31より大きいJavaのBufferedImage

私は自分のイメージクラスを作成することを考えましたが、すべてをそのようにするには十分知識がありません。

提案がありますか? はあなたが

+1

なぜ*画像*にする必要がありますか?または、ある種のオフ・ヒープの2Dバッファで作業することができますか?あなたは何とかそれを管理したとしても、どのプログラムでも使えないとあなたは言う。入手可能な情報を見ると、それは非常に特殊な問題のようです。広範囲なので、話題にならないかもしれません。より詳細な情報があれば、おそらくあなたが必要とするものがあれば(カスタム 'java.awt.image。{DataBuffer、Raster、...}'で可能かもしれない)、カスタム画像のアイデアについて助けてくれる人がいるかもしれません。 –

+0

私は、フラクタルのような画像を生成する反復関数システム画像を作成しており、これらの大きなプリントを作成する予定です。 – DominiUmbra

+0

Java BufferedImageクラスの制限を乗り越えても、画像ファイル形式にはまだ限界があることに注意してください。例えば、 JPEGは各次元で最大65535ピクセルをサポートし、TIFFは最大4Gbのファイルサイズを持ちます。プリンタに供給するフォーマットは何ですか? – samgak

答えて

0

あなたはおそらく、そのサイズのメモリの画像をロードするために苦労していますありがとうございましたので、2^31のx 1ピクセルだろうの画像のメモリフットプリント:

2^31px * 1px * 4 bytes/px = 4,294,967,296 bytes = ~4.2 GB 

2^31px X 4PX画像ほとんどのコンピュータより多くのメモリを消費します。このような状況では、画像をつなぎ合わせることが正しいデザインです。簡単な解決策は、イメージの多次元配列を保持し、必要に応じてメモリにロードしたりメモリからロードしたりすることです。

ImageMagickは、画像を処理する成熟したユーティリティであり、非常に大きな画像サイズをサポートすることができます。大きな画像ファイルを書きたいと言いますから、montage featureを使用することをお勧めします。フラクタルの一部をレンダリングしてディスクに保存し、レンダリングが完了したら、プログラムからImageMagickモンタージュコマンドを呼び出して最終的な大きなファイルを生成します。

+0

私は32GBのワークステーションを使っていますので、まだ問題はありません。どのようにイメージを1つのイメージファイルに書きますか? – DominiUmbra

+0

個人的にはImageMagickを使用するのは、これを自分で書くことは難しいためです。特に、イメージファイル形式を扱い、徐々に大きなイメージファイルを作成しなければならないときは、特にそうです。 ImageMagickのモンタージュ機能を見てみましょう。 http://www.imagemagick.org/Usage/montage/フラクタルの各部分をディスクに書き込んだり、最後にImageMagickを使って完全なファイルを作成したりします。 – Samuel

0

私は、GIMPがあらゆる次元で2^31以下の写真をインポートできることを知ったので、これで写真を一緒にステッチすることができます。返事をいただいた皆さん、ありがとう。

関連する問題