2017-05-30 33 views
0

我正在尋找一種方法來渲染一個場景從視圖中隱藏,然後創建第二個縮小的副本初始顯示。顯然,我可以再次渲染內容以創建只有更小的副本。用另一種語言編寫的原始代碼雖然使用平滑(空間過濾)收縮功能產生了更好的結果來創建小副本。 JavaFX中有這樣的位圖複製/縮小/平滑功能嗎?它有什麼用處?收縮JavaFX圖形

+0

有一個'setScaleX (double value)'Node'類中的'函數,這是你在找什麼? – Oswald

+0

我認爲,我希望我沒有誤解,setScale函數可以用作「實現它的另一種方式」的一部分。換句話說,如果我要重畫場景而不是執行位圖副本。 – Richard

+0

不完全確定我明白這個問題,但是您可以['snapshot'](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/Scene.html#snapshot-javafx.scene。 image.WritableImage-)現有的場景來創建一個'Image',然後顯示縮放在['ImageView']中的圖像(http://docs.oracle.com/javase/8/javafx/api/javafx/scene/圖像/ ImageView.html)。使用'setFitHeight()','setFitWidth()','setPreserveRatio()'和'setSmooth()'來控制縮放。這隻會給出場景的靜態視圖,所以如果有動畫,就不會在圖像中看到它們。 –

回答

1

您可以創建一個場景的快照作爲WritableImage如下:

Scene scene = ... ; 

Image image = scene.snapshot(null); 

,然後在圖像視圖中顯示它的縮放版本:

ImageView sceneImage = new ImageView(); 
sceneImage.setFitWidth(desiredWidth); 
sceneImage.setFitHeight(desiredHeight); 
// force aspect ratio to be preserved if fitWidth and fitHeight would distort it: 
sceneImage.setPreserveRatio(true); 
// this provides a tiny bit of control over the scaling used: 
sceneImage.setSmooth(true); 

sceneImage.setImage(image); 
+0

非常感謝。 – Richard