2016-06-17 17 views
0

Ich nehme einen BufferedImage namens „img“ und Drehen Pi/2 rad mit der Affine Funktion zu transformieren. Hier ist der Code für die obige Beschreibung:Zählpixel nach der Verwendung von Drehaffine

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); 

jedoch innerhalb dieser gepufferten Bild, ich habe ein Pixel an der Position (x, y), die ich versuche, den Überblick über Post-Rotation zu halten. Ich habe mich gefragt, wie ich der Position dieses Pixels folgen soll? Ich bin nicht sicher, wie die Affine dreht mathematisch das Bild, so dass ich hatte gehofft, dass jemand etwas Einblick in das Verfolgen der Pixelposition nach der Drehung verleihen könnte.

Antwort

0

würde ich folgendes

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()); 

obwohl seine mathematische Präzision bezweifelt verwenden, sondern kann in einem „mehr oder weniger“ Sinn verwendet werden. Sie können mit Ihrem eigenen Experimente bestätigen, wobei das Verfahren in Frage

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

Zuerst bestimmen, ob die Affine das Bild im Uhrzeigersinn bewegt oder gegen den Uhrzeigersinn (wahrscheinlich gegen den Uhrzeigersinn basierend auf Einheitskreis Winkel). Wenn es sich im Uhrzeigersinn bewegt, entspricht der Punkt (x, y) (-y, x), andernfalls entspricht er (y, -x) dem Uhrzeigersinn.

+0

Vielen Dank für die Antwort. Ich weiß jedoch nicht, was die AffineTransform bewegt. Diese Gleichungen beruhen auf dem Ursprung (0,0), aber ich weiß nicht, was diese Funktion als Ursprung betrachtet. – user3341249

+0

Nun, wenden Sie es einfach auf ein Bild und sehen Sie, wie das Bild aussieht. Ich glaube, der Ursprung ist normalerweise die obere linke Ecke. Verwenden Sie auch 'Math.PI/2' –

0

AffineTransform eine transform() Methode verfügt, die ein Point2D nimmt. Versuchen Sie Folgendes:

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 
Verwandte Themen