1

スイングデスクトップアプリケーションを作成しています。レイヤードベクターグラフィックスを描画し、インターフェイスはスクロールバーを使用してズームインする機能を備えています。ベクターグラフィックスは約5レイヤーあり、特に1レイヤーの描画には非常にコストがかかります。レイヤーは時々再描画する必要があるかもしれません(単純なアニメーション)。

現在の状況は次のとおりです。

  1. バッファリングされた画像が作成されます
  2. すべてのレイヤーが画像に描画されます
  3. バッファリングされた画像は、スクロールバーを使用できるように同じサイズのパネルを使用して画面に表示されます。

ズームインするとパフォーマンスの問題が発生します。ズームすると、バッファリングされた画像が非常に大きくなる可能性があります。スケールが16xの場合、画像は60000x60でピークに達する可能性があります。オフコースこれは多くの記憶を取ります、そして私はこれを再設計したいと思います。

どこから始めればいいのかわからないのですが、車輪の再発明をしているような気がします。java2dに関する私の知識も非常に限られています。ライブラリを使用してこれを改善したいのですが、必要な機能を備えたものが必要だと思います。頭に浮かぶ図書館はありますか?

4

2 に答える 2

1

バッファリングされたイメージを作成しないでください。表示される出力の量がわかる前に、出力をラスター化しています。

「損傷した」長方形を調べて、表示する必要のあるラスターの「サブ部分」を通知するコールバックシステムを用意し、必要なピクセルのみをラスタライズします。計算されるピクセルは表示されるピクセルのみであり、概念的に以前の16 ^ 2倍のピクセルを持つ画像ではないため、ズームレベルに関係なく比較的一貫したパフォーマンスが得られるはずです。

于 2012-08-17T21:34:19.073 に答える
1

あなたはJHotDrawを見ることができます。必要な機能があるかどうかはわかりません。

もう1つのアイデアは、大きな画像を作成するのではなく、小さな画像だけを作成してズームインするときに拡大することです(Javaでは拡大が高速です)。もちろん、これは低品質の(ピクセル化された)画像につながりますが、これは今のところ許容できる可能性があり、レンダリングされたらすぐに高品質のベクターグラフィックに置き換えることができます。

于 2012-08-17T23:01:28.177 に答える