2017-05-30 63 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