2017-05-30 3 views
0

Je cherche un moyen de rendre une scène cachée à la vue, puis de créer une seconde copie rétrécie pour l'affichage initial. Simplement je pourrais rendre le contenu une deuxième fois pour créer cette copie seulement plus petite. Le code original écrit dans une autre langue a cependant produit un meilleur résultat en utilisant une fonction de rétrécissement lisse (filtrée spatialement) pour créer la petite copie. Existe-t-il une telle fonction bitmap/shrink/smooth dans JavaFX et est-ce bon?Réduction de JavaFX Graphics

+0

Il y a un 'setScaleX (double valeur) 'function dans la classe' Node', est-ce ce que vous cherchez? – Oswald

+0

Je pense, et j'espère ne pas avoir mal compris, que les fonctions setScale seraient utiles dans le cadre de "l'autre façon" de le faire. En d'autres termes, si je devais redessiner la scène plutôt que d'exécuter une copie bitmap. – Richard

+0

Pas tout à fait sûr Je comprends la question, mais vous pouvez ['snapshot'] (http://docs.oracle.com/javase/8/javafx/api/javafx/scene/Scene.html#snapshot-javafx.scene. image.WritableImage-) la scène existante pour créer un 'Image' et ensuite afficher l'image mise à l'échelle dans un' 'ImageView' (http://docs.oracle.com/javase/8/javafx/api/javafx/scene/ image/ImageView.html). Utilisez 'setFitHeight()', 'setFitWidth()', 'setPreserveRatio()' et 'setSmooth()' pour contrôler la mise à l'échelle. Ceci donnera seulement une vue statique de la scène, donc si, par exemple, il y a des animations, vous ne les verrez pas dans l'image. –

Répondre

1

Vous pouvez créer un instantané d'une scène comme WritableImage comme suit:

Scene scene = ... ; 

Image image = scene.snapshot(null); 

puis afficher une version réduite de celle-ci dans une vue de l'image avec:

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

Merci beaucoup. – Richard