Schritt 1: Ein Vektorgrafikformat für die Joyce
Das Vektorformat ist an den Möglichkeiten unserer Grafikbibliothek ausgerichtet. Die Dateien sollen die Endung .VEC haben; jede Datei beginnt zudem mit einem Header mit den ASCII-Zeichen 'V', 'E', 'C'. Jedes Grafikobjekt wie Linie, Kreis, usw. wird mit einem Code (1 Byte) eingeleitet, dann folgen die Punktkoordinaten / Radien als Parameter. Alle Parameter sind im 2-Byte little endian Format abgelegt, d.h. das niederwertige Byte kommt zuerst. Das letzte Byte der Datei ist die 99 (alle Angaben in dezimal).
Code: Alles auswählen
Header: 'V' 'E' 'C'
Byte | 0 | 1 2 | 3 4 | 5 6 | 7 8 |
-----------------------------------------------------------------------
Dot | 0 | x | y | | |
Line | 1 | x1 | y1 | x2 | y2 |
Box | 2 | xleft | ytop | xright | ybottom |
Square | 3 | xleft | ytop | width | |
Ellipse | 4 | xcenter | ycenter | xradius | yradius |
Circle | 5 | xcenter | ycenter | radius | |
Multi-Dot | 10 |#dots| x1 | y1 | x2 | ... |
Multi-Line | 11 |#dots| x1 | y1 | x2 | ... |
Polygon-Fill | 12 |#dots| x1 | y1 | x2 | ... |
End | 99 | | | | |
Das Programm VECREAD liest VEC-Dateien und zeigt sie mit Hilfe der Joyce-Grafikbibliothek an.
Hier nun einige Beispiel-Dateien im VEC-Format:
Schritt 3: Ein Programm zum Umwandeln von SVG in VEC
VEC-Dateien kann man zwar auch manuell oder per Programm selbst erstellen, aber das ist ein mühsames Unterfangen. Es gibt ja bereits viele Dateien, die in verschiedenen Vektorformaten vorliegen. Mittlerweile ist SVG (= Scalable Vector Graphics) besonders populär, weil es von allen gängigen Browsern unterstützt wird; es ist quasi das Vektorgrafikformat des Internets.
Allerdings ist es nicht gerade einfach, einen SVG->VEC Konverter zu implementieren, weil SVG ein sehr mächtiges Format ist. Außerdem gilt es sich auf die SVG-Eigenschaften zu beschränken, die auch von unserer Joyce dargestellt werden können. So sind Farben, Gradientenverläufe, Animationen und einiges mehr nicht realisierbar. Man muss also Grafikelemente extrahieren, die durch Linien, Kreise, etc. darstellbar sind. Die Grafik muss zudem auf die Joyce-Auflösung skaliert werden.
Mein Programm TinySVG ist in Java geschrieben. Es ist eine ausführbare JAR-Datei, die einfach per Doppelklick gestartet wird. Via File > Open öffnet man eine SVG-Datei, die dann analysiert und in Grafikelemente zerlegt wird. Das Ergebnis der Umwandlung erscheint als Vorschau im Programmfenster; damit die Grafik auf dem PC nicht gestaucht aussieht, ist die Auflösung hier 720x512 Pixel. Die VEC-Datei (720x256) wird automatisch im selben Verzeichnis wie die geöffnete SVG-Datei erzeugt; sie hat denselben Dateinamen, allerdings mit der Endung ".VEC" statt ".SVG".