使用Swing在图像上旋转矩形

时间:2011-02-24 17:17:27

标签: java swing

当用户在图像顶部绘制一个矩形时,我想提前找到所有旋转的矩形以获得所有图像旋转角度(90,180,270,360)。

根据Java API,我可以继续调用Graphics2D rotate()方法。然后我可以使用这个Graphics2D转换器来获得旋转的矩形。

这适用于第一次旋转(1.5708)调用。我得到了正确的矩形点。之后的所有其他调用在使用Transformer后返回错误的矩形点。

我认为我的问题是Graphics2D translate(x,y)。我不明白如何使用它。

任何人都知道如何修复我的代码,以便在每次旋转后返回正确的Rectangle?

谢谢。

public void rotateRectangles(BufferedImage bim,int width,int height,Rectangle rect){
   BufferedImage bim = new BufferedImage(height, width,BufferedImage.TYPE_INT_RGB);
   Graphics2D g2d = (Graphics2D) (bufferedImage.createGraphics());
   g2d.translate(bufferedImage.getHeight(),0); 

   //Get Rectangle for 90 degree image rotation. This always good.
   g2d.rotate(1.5708);
   Shape shape = g2d.getTransform().createTransformedShape(rect); 
   Rectangle rotatedRect = shape.getBounds(); 
   System.out.println("rotated rectangle at 90 degrees.  Point x="+rotatedRect.x+"  y="+rotatedRect.y);


   //Get Rectangle for 180 degree image rotation. Getting wrong rotatedRect.
   g2d.rotate(1.5708);
   shape = g2d.getTransform().createTransformedShape(rect); 
   rotatedRect = shape.getBounds(); 
   System.out.println("rotated rectangle at 180 degrees. Point x="+rotatedRect.x+"  y="+rotatedRect.y); 


  //Get Rectangle for 270 degree image rotation. Getting wrong rotatedRect.
   g2d.rotate(1.5708);
   shape = g2d.getTransform().createTransformedShape(rect); 
   rotatedRect = shape.getBounds(); 
   System.out.println("rotated rectangle at 270 degrees. Point x="+rotatedRect.x+"  y="+rotatedRect.y);


  //Get Rectangle for 360 degree image rotation.Getting wrong rotatedRect.
   g2d.rotate(1.5708);
   shape = g2d.getTransform().createTransformedShape(rect); 
   rotatedRect = shape.getBounds(); 
   System.out.println("rotated rectangle at 360 degrees. Point x="+rotatedRect.x+"  y="+rotatedRect.y);         

}

谢谢。

1 个答案:

答案 0 :(得分:2)

不要通过g2d.rotate()旋转图形上下文的仿射变换,而应考虑使用此example中建议的createTransformedShape()

附录:特别注意示例Polygon的基线最初以原点为中心。结果,初始变换是围绕原点的旋转。在您的情况下,您可以使用包含锚点的rotate()方法,该方法点将作为矩形的中心。