0

Java でグラフィックス アプリケーションを使用しています。これは、さまざまな形状 (Graphics.drawLine()、drawArc()... メソッドを介して描画される線、円、円弧など) で構成されています。描画されたオブジェクトのすべてではないにしても、多くのマウスオーバー イベントを作成したいと考えています。

私が考えていたのは、メタデータを含むある種のビットマップを保存し、それを使用してマウスがどのオブジェクトの上にあるかを把握することでした。Javaでこれを行う方法はありますか? (マウスの移動ごとにすべてのオブジェクトをループすることは実行可能ではないようです)。

ありがとう、

ジョン

4

2 に答える 2

1

キーカラーソリューション

(コメントから移動しました)

  • 対象の画像と同じサイズのオフスクリーン グラフィックス バッファー (BufferedImage など) を作成します。
  • すべてのオブジェクトをこのバッファーに描画します。1 つの独自の色を持つ各オブジェクト。オブジェクト数に応じて、イメージ バッファを最適化できます。たとえば、8 ビット グラフィックを使用します。
  • 結果の画像バッファをピクセルごとに読み取ります ( Java の例 - image からピクセル配列を取得します)。現在のマウス位置のピクセル カラーを決定し、カラー インデックス (または RGB 値) をソース オブジェクトにマップします。

長所:

  • 解決策は「ピクセル精度」です。オブジェクトの境界は正確です - ピクセルからピクセルへ。
  • オブジェクトの重なりの問題を簡単に解決できます。必要な順序でそれらを描画するだけです。
  • オブジェクトの複雑さは制限されていません。理論的にはビットマップも可能です。

短所:

  • 1 つのオブジェクトを移動するには、オフスクリーン バッファ全体を再描画する必要があります
  • 低ビットの画像バッファを使用する場合、オブジェクトの数を制限できます
于 2013-07-16T14:34:18.150 に答える