我有一个简单的问题要问。Java Affine转换
是否可以在paint/paintComponent上下文之外进行仿射变换?例如,假设我想创建一个由通用路径组成的Shape,然后将其旋转45°。 是否有可能创建该对象,然后将其始终在类构造函数中旋转,而不是创建对象,然后在paint/paintComponent方法中将其旋转?
非常感谢。
UPDATE
非常感谢您的信息家伙。 所以今天我做了一个简单的测试,如你所建议的,它的工作原理。
这与仿射的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类中,就像它建议为paintCo做的那样mponent方法在java transforming tutorial?
- 使用getTransform方法获取当前变换。
- 使用变换,平移,缩放,剪切或旋转来连接变换。
- 执行渲染。
- 使用setTransform方法恢复原始变换。
再次,非常感谢你对你的答案
是的,这是可能的。 –
我是安德鲁·汤普森说的。这确实是可能的。为什么不试试呢? –
这是一个特别有益的练习;使用'Shape'的'PathIterator'来查看效果。 – trashgod