gpt4 book ai didi

java - 使用 Swing 旋转图像上的矩形

转载 作者:行者123 更新时间:2023-11-30 05:05:53 25 4
gpt4 key购买 nike

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

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

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

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

有人知道如何修复我的代码,以便它在每次旋转后返回正确的矩形吗?

谢谢。

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

}

谢谢。

最佳答案

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

附录:特别注意示例多边形的基线最初以原点为中心。因此,初始变换是绕原点旋转。对于您的情况,您可以使用 rotate()方法,其中包含一个 anchor ,该 anchor 将是矩形的中心。

关于java - 使用 Swing 旋转图像上的矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5108067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com