JavaFX Rendering von Canvas sehr langsam

jojo2100

Neues Mitglied
Hallo,

ich habe sehr viele Arcs zu zeichnen > 5000 Stück.
JavaFX Canvas übernimmt die Werte sehr schnell, aber das Rendern dauert sehr lange, also bis es auf den Bildschirm erscheint.

Ich zeichnet mit
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.strokeArc(..);

Die Canvas ist dem BorderPane zugeordnet:
BorderPane root = new BorderPane();
root.setTop(topContainer);
root.setCenter(canvas);
root.setBottom(statusBar);

Und die wiederum einer Scene und die Scene der Primary Stage
primaryStage.setScene(new Scene(root, 800,400));

Was mache ich falsch, dass dies so lange dauert?
Mache ist das mit der Canvas richtig oder zeichnet man die Arcs normal anders?
 
Ich hab leider keine Erfahrung mit Canvas, weder auf Swing noch auf JavaFX, ein Kollege von mir hatte vor kurzen ein paar Issues (8000x8000 Pixel Canvas: Speicherproblem auf Geräten mit wenig Video-RAM (Notebook, e.g.), Rendering: nur der sichtbare Teil in der Stage wird gerendert (er wollte einen Screenshot machen, doof, wenn der Rest leer(schwarz oder weiss) ist)).

Etwas älter aber vielleicht findest du hier ein paar Ideen:
https://jaxenter.com/tutorial-a-glimpse-at-javafxs-canvas-api-105696.html
https://community.oracle.com/thread/3550377
...

Vielleicht findest du irgendwo einen "Trick"... Sorry, mehr hab ich nicht.
 
Warum läßt du denn die Arcs überhaupt mit einem Canvas zeichnen? Es gibt doch auch direkt eine Node-Subklasse namens "Arc", und dieses Objekt kannst du direkt in den Szenengraph einfügen.

Sinngemäß so:
Java:
Arc arc = new Arc();
arc.setCenterX(50.0f);
arc.setCenterY(50.0f);
arc.setRadiusX(25.0f);
arc.setRadiusY(25.0f);
arc.setStartAngle(45.0f);
arc.setLength(270.0f);
arc.setType(ArcType.ROUND);
Group root = new Group(arc);

// Usw, das kannst du ja.
 

Zurück
Oben