我有一個簡單的問題要問。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