Wie zeichnet man eine 1 pixel Breite Linie mit Javafx Canvas?
Ich habe googeln und suchen, gefunden, einige Fragen/Beiträge, aber keiner der Adresse mein problem.
Ich bin zeichnen von Linien, die direkt auf canvas (JavaFX) mit:
gc.setStroke(color);
gc.setLineWidth(lineWidth);
gc.strokeLine(startX, startY, endX, endY);
Möchte ich 1 pixel Breite Linien. Also ich lineWidth=1.
Ich bekomme diese:
Beachten Sie, dass die Linien sind verschwommen. Es ist nicht 1 pixel.
Ich habe versucht, lineWidth auf 0.1 oder 0.01, etc. Es ändert nicht das Ergebnis.
Übrigens... ich verstehe nicht, warum dieser parameter ist ein doppelter. Ich habe irgendwo gelesen, dass es hat zu tun mit DPI. Aber ich verstehe nicht, was ist das Gerät und wie ist es in Pixel umgewandelt.
Oracle ist die Dokumentation nicht helfen. (oder habe ich nicht gefunden, das hilft dabei)
Ich würde gerne dieses statt:
Realisiert wurde dies in einem anderen Plattform. Beachten Sie, dass die Linien sind scharf und haben nur eine 1 pixel.
Shape
Dokumentation unter "Interaktion mit den Koordinatensystemen"; obwohl ich nicht weiß, wie das problem zu lösen, die im Kontext einer Leinwand.Der folgende post ist sehr interessant:dlemmermann.wordpress.com/2014/04/10/... Aber der workaround hat nicht funktioniert für mich und ich habe nicht verstanden, warum es wäre.
Ich habe gerade dies gefunden: community.oracle.com/thread/2465226 Es wird erklärt, wie es funktioniert... ich werde es testen und wenn es funktioniert, ich beantworte meine eigene Frage posten der Lösung.
James_D Ihre Erklärung ist präzise
InformationsquelleAutor Chocksmith | 2015-01-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorstellen, jedes pixel wie ein (kleines) Rechteck (anstatt einem Punkt). Die integer-Koordinaten sind die Grenzen zwischen den Pixeln; so einer (horizontalen oder vertikalen) Linie mit ganzzahligen Koordinaten fällt "zwischen den Pixeln". Gerendert wird über antialising, der annähernd die Hälfte der Linie auf ein pixel und die Hälfte auf der anderen. Verschieben der Linie von 0,5 Pixel nach Links oder rechts bewegt es in die Mitte des pixels, immer rund um das Thema.
Hier ist ein Beispiel:
Und die Ergebnisse:
OMG, warum ist nicht, dass der erste Absatz in der Leinwand-Dokumentation? Danke für die information, das ändert eine Menge.
Hi. Ich weiß, es ist fast 4 Jahre von der letzten Antwort, aber... Können wir hinzufügen, diese in einer Klasse erweitert JPanel? Als Beispiel, ich habe eine Klasse extends JPanel wo ich ziehen haben 5 Linien, eine senkrecht, auf der Mitte der Breite des JPanel und 4 horizontale. Auf diese Weise werde ich teilen JPanel in 10 Quadrate ... ich habe versucht, Ihre Lösung, aber es gibt mir eine Fehlermeldung wie "Internal graphics not initialized yet" ... Danke
InformationsquelleAutor James_D