Ein Graphics2D ist eine Spüle für Rendering-Befehle. Es nie fungiert als eine Quelle, wie Sie leicht aus der Abwesenheit von Methoden ableiten können, die entfernt diesen Zweck passen würde (nämlich alle Methoden, die lesen den tatsächlichen Inhalt der Grafiken).
Dies ist auch ein sauberer Ansatz vom Design Standpunkt, Graphics soll Rendering nicht nur Pixelraster, sondern jede Art von Grafikgerät ermöglichen.
Obwohl Graphics nur eine abstrakte Klasse ist, können Sie Implementierungen erstellen, mit denen Sie den Inhalt, , aber nicht über die Graphics2D-API zurücklesen können. Es ist immer eine spezifisch hinzugefügte Fähigkeit durch eine nicht verwandte API (z. B. BufferedImage).
Wenn Sie ein SVG erstellen möchten, gibt es vektorbasierte Primitive, die Sie verwenden könnten; Es gibt eine ganze Reihe von Unterklassen von java.awt.Shape, mit denen Sie die Geometrie definieren können. Formen können in einem Graphics2D gerendert werden oder Sie können einen Shape mit getPathIterator() "durchlaufen" und die von Ihnen benötigte Operation ausführen.
Für den einfachen Zweck, eine vordefinierte Geometrie mehrfach zu rendern, sind Shapes das Vektoräquivalent eines Pixelbildes (Falls Sie sich wundern, müssen Sie translate/transform verwenden, um eine Shape beim Rendern neu zu positionieren , es gibt keine Aufrufe, die Koordinaten für Formen annehmen).
Um komplexere Formen aus Grundformen zu erstellen, können Sie die API java.awt.geom.Path2D verwenden, die beispielsweise über eine konkrete Implementierung namens GeneralPath verfügt, die das Kombinieren von Formen ermöglicht.
EDIT: Um es einfach zu machen, Graphics2D ist nicht das richtige Werkzeug für Ihre Aufgabe, Shape/GeneralPath ist.
Können Sie ein Beispiel Ihres Codes angeben, wie Sie die 2D-Formen zeichnen? – Ishmael
Es ist eine Reihe von Aufrufen wie "graphic.fillOval (x, y, cx, cy);". Ich muss dann dieses Grafikobjekt in ein anderes Grafikobjekt mit einem bestimmten Offset rendern. –