1

JLabel以下のコードを使用してマップを描画する拡張クラスを取得しました。new AffineTransform()これは、画像をそのままにしておくためのアイデンティティです (0,0,w,h)

 mygraphics2D = (Graphics2D) getGraphics();
 graphics2D.scale(2.0,2.0) ;
 graphics2D.rotate(....
 graphics2D.drawImage(myImageIcon.getImage(),new AffineTransform(), this);

JLabelこのイベントを使用してクリックすると:

public void mouseClicked(MouseEvent e) {
x =e.getX() ;
y = e.getY();
NewX = ????
NewY = ????
}

新しい座標を取得したい「スケーリング、回転...座標」を試しました

Point2D ptSrc = new Point2D.Double(x, y);
Point2D ptDst = new Point2D.Double(0, 0);
mygraphics2D.getTransform().transform(ptSrc, ptDst);

しかし、ptDstは(スケーリング、回転、..)座標とは異なります。助けてください!!!

4

3 に答える 3

4

2 つの座標系の間で変換するには、順変換と逆変換の両方が必要なようです。このでは、スケーリング方程式は明示的です。この代替アプローチでは、秒AffineTransformが使用されます。

于 2012-08-06T02:14:01.327 に答える
1

それほど難しくありません;-)

  1. コンポーネントを再描画するAffineTransformと、変換後に保存されますg2.getTransform()

  2. invert()次に、その関数を呼び出します

  3. イベントではmouseClicked()、次のコードを使用します。

    Point2D p= trans.transform(new Point2D.Double(evt.getX(), evt.getY()), null);
    System.out.println("click x="+p.getX()+" y="+p.getY());
    

それでおしまい!

于 2013-09-22T12:23:05.857 に答える
1

私はこれらを見つけました:

それらが役立つかどうかはわかりません。

于 2012-08-06T01:21:40.087 に答える