gpt4 book ai didi

Java 仿射变换

转载 作者:太空宇宙 更新时间:2023-11-04 07:32:15 25 4
gpt4 key购买 nike

我有一个简单的问题要问。

是否可以在paint/paintComponent上下文之外进行仿射变换?例如,假设我想创建一个由 GeneralPath 组成的形状,然后将其旋转 45°。是否可以创建该对象,然后始终在类构造函数中旋转它,而不是创建该对象,然后在 Paint/paintComponent 方法中旋转它?

非常感谢。

<小时/>

更新

非常感谢各位提供的信息。所以今天我按照你的建议做了一个简单的测试,它有效。

这是在paintComponent方法中使用仿射变换,注释:

public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setColor(new Color(230, 230, 230));
g2.fill(enne.getNuvola());//enne.getNuvola(): code from an omitted class. returns a Shape of a cloud
g2.setColor(new Color(20, 20, 20));

/*
AffineTransform t = AffineTransform.getTranslateInstance(400,400);
g2.transform(t);
*/

g2.fill(rock.getRocket());

}//paintComponent

这是 GeneralPath 的类构造函数内的仿射变换

public class Rocket {

GeneralPath rocket;

public Rocket(){

rocket = new GeneralPath();
rocket.moveTo(10,10);
rocket.lineTo(15,15);
rocket.lineTo(15,50);
rocket.lineTo(5,50);
rocket.lineTo(5,15);
rocket.lineTo(10,10);
rocket.closePath();

AffineTransform t = AffineTransform.getTranslateInstance(400,400);
rocket.transform(t);


}//Rocket Costruttore

public GeneralPath getRocket(){
return this.rocket;
}

}//Rocket

但现在我有另一个问题:

我是否也必须在 Rocket 类中保护当前变换的当前状态,就像建议对java transforming tutorial中的paintComponent方法所做的那样?

  1. 使用 getTransform 方法获取当前变换。
  2. 使用变换、平移、缩放、剪切或旋转来连接变换。
  3. 执行渲染。
  4. 使用 setTransform 方法恢复原始变换。

再次非常感谢您的回答:-)

最佳答案

不,应仅重置变换以恢复 Graphics 对象的状态,因为系统可以将 Graphics 对象重用于其他绘图。如果您在没有 Graphics 对象的情况下进行转换,则无需担心这一点。

请注意,将来您不应该通过编辑旧问题来提出新问题,因为这会造成困惑。您应该发布一个全新的问题(可能链接您的旧问题)。

关于Java 仿射变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17503400/

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