2016-06-17 7 views
0

私は、 "img"という名前のBufferedImageを取り、Affine変換関数を使用してPi/2ラジアンを回転しています。AffineTransformを使用して回転後のピクセルを追跡する

BufferedImage img = ImageIO.read(new File(filePath)); 

AffineTransform tx = new AffineTransform(); 
tx.rotate(3.14/2, img.getWidth()/2, img.getHeight()/2); 

AffineTransformOp op = new AffineTransformOp(tx, 
AffineTransformOp.TYPE_BILINEAR); 
img = op.filter(img, null); 

しかし、この緩衝画像内で、私は後回転を追跡しようとしている位置(x、y)の画素を有している:ここでは、上記の説明のためのコードです。このピクセルの位置をどのように追うべきなのか疑問に思っていましたか? AffineTransformが画像を数学的にどのように回転させるかはわかりません。そのため、回転後にピクセルの位置を追跡するための洞察が得られることを期待していました。

答えて

0

その数学的精度が疑われているが、「多少」の意味で使用することができるが、私は、次

AffineTransform tx = new AffineTransform(); 
tx.rotate(3.14/5, img.getWidth()/2, img.getHeight()/2); 

AffineTransformOp op = new AffineTransformOp(tx, 
AffineTransformOp.TYPE_BILINEAR); 
BufferedImage img2 = op.filter(img, null); 

g2.drawImage(img, 0, 0, null); 
g2.drawImage(img2, 0, 0, null); 
g2.setColor(Color.magenta); 
Point2D.Double p2=(Point2D.Double)op.getPoint2D(new Point2D.Double(10, hc/2), null); 
g2.fillOval(10, hc/2, 5, 5); 
g2.setColor(Color.red); 
g2.fillOval((int)p2.x, (int)p2.y, 5, 5); 
System.out.println(p2.toString()); 

を使用します。あなたは、問題のメソッドがPoint2Dを取るtransform()方法があり

Point2D.Double p2=(Point2D.Double)op.getPoint2D(new Point2D.Double(x, y), null); 
0

最初に、AffineTransformが画像を時計回りまたは反時計回りに移動するかどうかを判定します(おそらく、単位円の角度に基づいて反時計回りに)。時計回りに動くと点(x、y)は(-y、x)に対応し、そうでなければ反時計回りになれば(y、-x)に対応する。

+0

ありがとうございました。しかし、私はAffineTransformがイメージをどのように動かすのか分かりません。これらの方程式は原点(0,0)に依存していますが、この関数が何を起点としているかはわかりません。 – user3341249

+0

さて、それを画像に適用して、画像がどのように見えるかを確認してください。私は原点が通常は左上角であると信じています。また、 'Math.PI/2'を使用してください –

0

AffineTransformであるあなた自身の実験で確認することができます。試してみてください:

Point pt = new Point(10, 10); // replace 10, 10 with your pixel location 
Point transformedPt = tx.transform(pt, null); // this is the new post-tx location 
関連する問題