23.09.2012, 11:06
Nach ein wenig Recherchen zum GIF-Format habe ich festgestellt, dass GIF ziemlich viel von dem unterstützt, was wir benötigen: Animationen, Teilbilder mit eigener Startposition/Größe und Anzeigedauer. Was leider fehlt, sind Namen für die einzelnen Frames, die könnte man zur Not in einem Kommentar speichern.
Für die XML-Lösung hatte ich mir damals folgendes überlegt (ohne Anspruch auf Vollständigkeit):
Für die XML-Lösung hatte ich mir damals folgendes überlegt (ohne Anspruch auf Vollständigkeit):
Format der XML-Datei (DTD)
* Allgemeine Attribute
Die wollte ich ursprünglich alle als Attribute. Da sie aber mehrfach vorkommen, sind Elemente vielleicht angemessener.
** animspeed [uint]
** label/name [string]: Name einer Sequenz o.ä.
** playmode [???]
** xoffset, yoffset [int]: Kommt in Sequenzebene und Einzelbildebene in verschiedenen Formaten vor.
** width, height [uint]: Kommt von Dateiebene bis Einzelbildebene in allen Formaten vor.
** action [???]
** Compression [string(case-insensitive):{auto,raw, rle, powerpack}]: Kommt von Dateiebene bis Einzelbildebene in verschiedenen Formaten vor.
* Auto-Attribute: Diese Attribute sollen automatisch beim Lesen der XML-Datei ermittelt werden.
** Anzahl der Sequenzen in der Datei: Danach richtet sich teilweise das Header-Format.
** Anzahl der Bilder in einer Sequenz: Sollte man wissen, bevor man eine Sequenz speichert.
* nltgraphic: Dieser Tag ist die Wurzel eines NLT-Bildes.
Attribute:
** format [string(case-insensitive):{nvf,ace,bob,raw}]
Gibt das Bildformat an. Dieser Parameter /muss/ angegeben werden; es gibt keinen Default-Wert.
** compression [string(case-insensitive):{raw,rle,powerpack,auto}]: Gibt das Teilformat des Formats an. Betrifft hauptsächlich NVF, aber auch andere Formate (bob) haben Varianten. *todo*: Default wird je nach Format gewählt.
** compression [string(case-insensitive):{raw,rle,powerpack,auto}]: Kompressions-Algorithmus. Die einzelnen Formate haben Default-Werte; bei format=raw ist compression=raw Default, ansonsten compression=auto. Der "auto"-Wert probiert erst sowohl rle als auch powerpack und wählt dann den Algorithmus, die kleinste Datei erzeugt.
* sequence: Enthält eine Folge von Bildern. Vorkommen: Innerhalb von <sequence> und <nltgraphic>, sonst nicht. Dadurch kann man mehrere Sequenzen innerhalb eines Bildes definieren, wie z.B. für .bob benötigt.
Attribute:
** name: Name der Sequenz. Wird z.B. im .bob-Format benötigt. Es muss (durch den Konverter) sichergestellt werden, dass dieser Name die korrekte Länge hat. Ansonsten Fehlermeldung ausgeben.
** compression: Kompressionsmodus. Wird von oben weitervererbt.
** offsetx, offsety: Ganzzahliges Offset des Bildes. Default=0
** width, height: Natürlichzahlige Dimensionen des Bildes. Kein Defaultwert.
Sollten diese Werte nicht mit denen einer Bilddatei übereinstimmen, gib eine Warnung aus (was durch die Vererbung ohnehin geschehen sollte).
* image
Inhalt ist der Dateiname des Bildes. Format wird automatisch (anhand der Endung) erkannt.
Vorkommen: Innerhalb von <sequence> und <nltgraphic>, sonst nicht.
Attribute:
** in_format: Dient zum manuellen Setzen des Formates der Eingabedatei. Definitionsbereich: png, gif, bmp, ... -- je nachdem, was der Konverter unterstützt.
** compression: Kompressionsmodus. Wird von oben weitervererbt.
** offsetx, offsety: Ganzzahliges Offset des Bildes. Default=0. Sollten diese Werte width/height der enthaltenden Sequenz übersteigen, wird eine Warnung/Fehlermeldung ausgegeben.
** width, height: Natürlichzahlige Dimensionen des Bildes. Default=(Größe des eingelesenen Bildes aus der Bilddatei). Sollten diese Werte nicht mit denen der Bilddatei übereinstimmen, gib eine Warnung aus. Sollten diese Werte (plus Offset) width/height der enthaltenden Sequenz übersteigen, wird eine Warnung/Fehlermeldung ausgegeben. (*TODO*: Sollten diese Werte beim Auslesen von Bildern in die XML-Datei geschrieben werden oder nicht?)
* palette: Palette kann als Datei angegeben werden oder durch Paletteneinträge
Attribute:
** size [uint:0...256]: Wie viele Farben enthält die Palette? Default: 256.
** palettefile: Datei, aus der die Palette gelesen wird. Da könnte man noch so Sachen einbauen wie z.B. "lies nur die ersten 32 Farben aus dieser Datei".
Inhalt ist der Dateiname.
* paletteentry
Attribute:
** r,g,b: Palettendaten. Angabe als Integer-Wert von 0 bis 255. Default = 0.
* Allgemeine Attribute
Die wollte ich ursprünglich alle als Attribute. Da sie aber mehrfach vorkommen, sind Elemente vielleicht angemessener.
** animspeed [uint]
** label/name [string]: Name einer Sequenz o.ä.
** playmode [???]
** xoffset, yoffset [int]: Kommt in Sequenzebene und Einzelbildebene in verschiedenen Formaten vor.
** width, height [uint]: Kommt von Dateiebene bis Einzelbildebene in allen Formaten vor.
** action [???]
** Compression [string(case-insensitive):{auto,raw, rle, powerpack}]: Kommt von Dateiebene bis Einzelbildebene in verschiedenen Formaten vor.
* Auto-Attribute: Diese Attribute sollen automatisch beim Lesen der XML-Datei ermittelt werden.
** Anzahl der Sequenzen in der Datei: Danach richtet sich teilweise das Header-Format.
** Anzahl der Bilder in einer Sequenz: Sollte man wissen, bevor man eine Sequenz speichert.
* nltgraphic: Dieser Tag ist die Wurzel eines NLT-Bildes.
Attribute:
** format [string(case-insensitive):{nvf,ace,bob,raw}]
Gibt das Bildformat an. Dieser Parameter /muss/ angegeben werden; es gibt keinen Default-Wert.
** compression [string(case-insensitive):{raw,rle,powerpack,auto}]: Gibt das Teilformat des Formats an. Betrifft hauptsächlich NVF, aber auch andere Formate (bob) haben Varianten. *todo*: Default wird je nach Format gewählt.
** compression [string(case-insensitive):{raw,rle,powerpack,auto}]: Kompressions-Algorithmus. Die einzelnen Formate haben Default-Werte; bei format=raw ist compression=raw Default, ansonsten compression=auto. Der "auto"-Wert probiert erst sowohl rle als auch powerpack und wählt dann den Algorithmus, die kleinste Datei erzeugt.
* sequence: Enthält eine Folge von Bildern. Vorkommen: Innerhalb von <sequence> und <nltgraphic>, sonst nicht. Dadurch kann man mehrere Sequenzen innerhalb eines Bildes definieren, wie z.B. für .bob benötigt.
Attribute:
** name: Name der Sequenz. Wird z.B. im .bob-Format benötigt. Es muss (durch den Konverter) sichergestellt werden, dass dieser Name die korrekte Länge hat. Ansonsten Fehlermeldung ausgeben.
** compression: Kompressionsmodus. Wird von oben weitervererbt.
** offsetx, offsety: Ganzzahliges Offset des Bildes. Default=0
** width, height: Natürlichzahlige Dimensionen des Bildes. Kein Defaultwert.
Sollten diese Werte nicht mit denen einer Bilddatei übereinstimmen, gib eine Warnung aus (was durch die Vererbung ohnehin geschehen sollte).
* image
Inhalt ist der Dateiname des Bildes. Format wird automatisch (anhand der Endung) erkannt.
Vorkommen: Innerhalb von <sequence> und <nltgraphic>, sonst nicht.
Attribute:
** in_format: Dient zum manuellen Setzen des Formates der Eingabedatei. Definitionsbereich: png, gif, bmp, ... -- je nachdem, was der Konverter unterstützt.
** compression: Kompressionsmodus. Wird von oben weitervererbt.
** offsetx, offsety: Ganzzahliges Offset des Bildes. Default=0. Sollten diese Werte width/height der enthaltenden Sequenz übersteigen, wird eine Warnung/Fehlermeldung ausgegeben.
** width, height: Natürlichzahlige Dimensionen des Bildes. Default=(Größe des eingelesenen Bildes aus der Bilddatei). Sollten diese Werte nicht mit denen der Bilddatei übereinstimmen, gib eine Warnung aus. Sollten diese Werte (plus Offset) width/height der enthaltenden Sequenz übersteigen, wird eine Warnung/Fehlermeldung ausgegeben. (*TODO*: Sollten diese Werte beim Auslesen von Bildern in die XML-Datei geschrieben werden oder nicht?)
* palette: Palette kann als Datei angegeben werden oder durch Paletteneinträge
Attribute:
** size [uint:0...256]: Wie viele Farben enthält die Palette? Default: 256.
** palettefile: Datei, aus der die Palette gelesen wird. Da könnte man noch so Sachen einbauen wie z.B. "lies nur die ersten 32 Farben aus dieser Datei".
Inhalt ist der Dateiname.
* paletteentry
Attribute:
** r,g,b: Palettendaten. Angabe als Integer-Wert von 0 bis 255. Default = 0.
Hallo, ich bin's - der Bart von Fidel Castro. Und mir ist total langweilich nie geschnitten wurde.
I'm a roleplayer. My dice are like my relationships: platonic and unlucky.
I'm a roleplayer. My dice are like my relationships: platonic and unlucky.