2012-09-21 86 views
6

現在我抓住GraphicsContextcanvas節點,並試圖一如何放大JavaFX 2 Canvas節點?

gc.scale(2, 2); 

在我canvas我有幾十個可用的方法。所以我知道必須有一些東西可以放大。然而,我的嘗試沒有產生明顯的「增長」或「縮放」。有什麼我需要打電話讓這個被應用或重繪?

回答

5

我認爲gc.scale(2,2)會將您在畫布上繪製的下一個東西縮放2倍,而不是您已經繪製的東西。

如果要縮放畫布,可以在畫布上設置變換,而不是圖形上下文。

canvas.setScaleX(2); 
canvas.setScaleY(2); 

如果你想縮放畫布反映在佈局計算的佈局管理器,那麼你可以在一個組把它包起來,如果你要放大樣的縮放畫布上的效果在畫布上的部分被剪切,那麼您可以將畫布放在ScrollPane中並定義一個視口或在畫布節點上設置一個剪輯。

更新討論像素化問題

爲了避免放大像素化的問題,我想你會需要保持所有這些都被吸引到最新的圖形命令的記錄,那麼當你想改變縮放係數,清除畫布,將新比例應用於畫布,然後重播所有圖形命令。也許可以使用像svg這樣的格式來記錄圖形命令。或者你可以使用場景圖形繪製而不是畫布,那麼你也不會有像素化問題。

我覺得這裏要注意的重要一點是,canvas應該是一種立即模式的火和遺忘的東西,而不是像場景圖這樣的保留模式繪製服務。

+0

是的,這個工程。八九不離十。它使一切都非常糟糕。由於線只是矢量,我想知道是否有方法來「重繪」您設置的放大倍數中的所有內容? 我知道我能夠做到這一點,當我只使用普通的組對象與畫布。它看起來像這樣: private void reDrawPreview(){ for(Node n:canvsGroup.getChildren()){ Line nd =(Line)n; nd.setStrokeWidth(Draw2d.getStrokeWeight()); } – ril3y

+0

抱歉格式化..不知道如何格式化代碼的註釋? – ril3y

+0

你可以在這段視頻中看到它在3:36是如何工作的。 http://www.youtube.com/watch?v=kdJZbVO4E4Q&feature=g-upl – ril3y