2016-09-28 7 views
2

Ich versuche ein Los von Knoten (Millionen) in JavaFX innerhalb eines Containerknotens zu rendern und ich stoße auf Leistungsprobleme, wenn ich das übersetze oder skaliere Container-Knoten. Ich habe entdeckt, dass ich containerNode.setCache(true) tun kann, was zu einer glatten Übersetzung und Skalierung führt, aber dann sieht der Knoten natürlich sehr körnig aus, wenn Sie heranzoomen.Erneutes Rendering eines zwischengespeicherten Knotens in JavaFX mit höherer Auflösung

Ich versuche einen Weg zu finden, die körnige Cache-Version beim Skalieren zu verwenden/zoomen, und dann möchte ich den Knoten programmatisch erneut mit einer höheren Auflösung rendern, sobald ich gezoomt bin. Oder zumindest den sichtbaren Teil neu rendern.

Ich kann nicht herausfinden, wie Sie den Cache anweisen, den Knoten erneut zu rendern. Ich habe einige interessante Verhalten bei meinen Versuchen feststellen:

  1. Wenn Sie zunächst einmal den Knoten mit Cache angezeigt und Sie sind sehr herausgezoomt, um die (der Knoten erscheint klein) und aktivieren dann den Cache, in sehr führt ein- eine sehr körnige Erscheinung.
  2. Wenn Sie jedoch (erneut) zuerst den Knoten mit dem ausgeschalteten Cache anzeigen, aber sehr vergrößert sind, führt das Aktivieren des Caches zu einer wesentlich höheren Auflösung, die zwischengespeichert wird. Es sieht so aus, als ob es die Cache-Auflösung basierend auf dem Zoom zu dem Zeitpunkt auswählt, zu dem der Cache aktiviert wurde.
  3. ABER (zu meiner Enttäuschung), wenn Sie einen Cache beim Herauszoomen (wie in Schritt 1) ​​erstellt und dann herangezoomt haben, führt das Deaktivieren und anschließende Reaktivieren des Caches nicht zu einem neuen Cache-Rendering.

Gibt es eine Lösung?

Antwort

4

Was Sie zusätzlich zum Aktivieren des Caching tun können, ist es, mit den Cache-Hinweisen zu spielen. Bevor Sie beispielsweise mit dem Zoomen beginnen, setzen Sie den Cache-Hinweis SPEED und behalten dies während der Zoom-Operation bei. Sobald Sie mit dem Zoomen fertig sind, wechseln Sie zurück zu QUALITY, was zu einem erneuten Rendering führen sollte. Die Idee ist, dass während des Zoomens nur das zwischengespeicherte Bild skaliert wird und sobald Sie die endgültige Größe erreicht haben, rendern Sie die Knoten in hoher Qualität entsprechend ihrer aktuellen Größe neu.

+0

Das funktionierte, obwohl es etwas Experimentieren erforderte. Der direkte Wechsel von SPEED -> QUALITY -> SPEED in den Code hat nicht funktioniert. Ich musste die Benutzeroberfläche machen lassen und später zu SPEED wechseln. –

+0

Es freut mich zu hören, dass es für Sie funktioniert, obwohl ich es in umgekehrter Reihenfolge verwenden wollte. Der Standardmodus wäre QUALITÄT, und wenn Sie einen Zoom starten, wechseln Sie zu GESCHWINDIGKEIT und nachdem Sie mit dem Zoom fertig sind, wechseln Sie zurück zu QUALITÄT. Die Reihenfolge der Operation wäre also QUALITÄT -> GESCHWINDIGKEIT -> QUALITÄT. – mipa

Verwandte Themen