2016-08-16 10 views
-1

Gibt es eine Möglichkeit, ein Graphics2D-Objekt in ein anderes Graphics2D-Objekt zu rendern. Not by turning one into an Image and drawing that, aber wie die Grafikgrundelemente?Ein Graphics2D-Objekt in ein anderes Graphics2D-Objekt schreiben

Als Beispiel, sagen wir, ich möchte den gleichen Start 5 mal zeichnen. Also erstelle ich ein Graphics2D-Objekt, rendere den Stern dazu. Ich rendere dann dieses Star-Graphics2D-Objekt 5mal in meinem Haupt-Graphics2D-Objekt an 5 verschiedenen Stellen.

Durch Beibehaltung aller Linien zeichnen Grundelemente, wenn ich eine endgültige SVG-Datei aus dem Graphics2D-Objekt erstellen, kann es 1.000 Mal vergrößern und es ist immer noch ein sauberes Rendern.

Gibt es eine Möglichkeit, dies zu tun?

+0

Können Sie ein Beispiel Ihres Codes angeben, wie Sie die 2D-Formen zeichnen? – Ishmael

+0

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. –

Antwort

2

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.