2

巨大な画像(色などにアクセスするためのBufferedImage)をJScrollPane派生クラスに適合させる必要があります。そこまでは何も難しいことはありません。

画像はA3サンプルの素材のJPGスキャンで、サイズは13030x20840ピクセル、24ビット、重さはディスクで12MB、RAMで約800MBです。

BufferedImageをJpanelに埋め込みました。これは、Scrollpaneのビューとして存在します。

画像をスクロール/ドラッグしようとすると、応答に数秒かかるため、あまり便利ではありません。

スクロールペインのスクロールと画像のドラッグを可能な限りスムーズかつ反応的にレンダリングするために何をすべきかを知るためにあなたの助けが必要ですが、そのような画像では不可能である可能性があることは簡単にわかります。

ダブルバッファリングなど、多くのオプションを試しましたが、Swingはまったく初めてなので、簡単な解決策を見逃した可能性があります。

BufferedImageを他の何か、または何かで変更する必要がある場合、私はどんな解決策も受け入れます。

4

2 に答える 2

2

つまり、13,030x20,840ピクセルの大きな画像があります。

この画像を256x256ピクセルのタイルに分割すると、横に51タイル、下に82タイルのタイルセットが得られます。256は13,030と20,840に均等に収まらないため、行と列の最後のタイルは部分的な画像になります。

表示ウィンドウが400X400ピクセルであると仮定します。また、大きな画像の左上隅から開始したと仮定しましょう。

3x3タイルのバッファリングされた画像を取得して作成します。これは768x768ピクセルになり、スムーズなスクロールに十分なオーバーラップが可能になります。最初の行から最初の3タイル、2番目の行から最初の3タイル、3番目の行から最初の3タイルを取得して、3x3タイルのバッファー付き画像を作成します。

ここで、JScrollPaneで水平スクロールと垂直スクロールを設定する場合、水平スクロールの最大値を13,030に設定し、垂直スクロールの最大値を20,840に設定する必要があります。これは、ユーザーが大きな画像をスクロールしていることを動的に認識できるようにするためです。

OK、3x3タイルのバッファリングされた画像を表示します。ユーザーは右にスクロールして、他の画像を表示します。ユーザーは256ピクセルをスクロールしました。

アプリケーションは、新しい3x3タイルのバッファリングされたイメージを作成する必要があります。1行目、2行目、3行目から2番目から4番目のタイルを取得します。この新しいバッファリングされた画像を表示します。ユーザーには、1つの巨大な画像のように見えます。アプリケーションには、一連の小さな3x3タイルのバッファリングされた画像が表示されます。

mKorbelは、これらの小さなバッファリングされた画像をその場でビルドして表示するコードをすでに作成しています。

ズームに対処するために、Javaアプリケーションの外部で大きな画像のサイズを変更し、複数のタイルセットを作成できます。これにより、Javaアプリケーションのコードはより複雑になりますが、Javaアプリケーションでバッファリングされた小さい画像のサイズを変更するよりもはるかに高速です。

于 2012-11-15T14:04:02.390 に答える
0

そこで必要なものを見つけました:

非常に大きな画像の操作とタイリング

素敵な本、示されているサンプルはそれをカバーしています。

Java JAI libには、この種の問題を処理するための多くの機能があり、Oracleによってサポートされています。つまり、(理論的には)安定していて持続可能です。

@BryanDに感謝します!

于 2013-02-07T16:40:24.667 に答える