Wirkungsweise der Datenkompression

Vorbereitung: WMF-Datei erstellen
Der Modellbereich muss schwarz eingestellt sein und nicht dunkelgrau oder hellgelb. Damit die WMF auch Text hat, müssen für den Text diese Bedingungen erfüllt sein:“Text mit Truetypeschriftart; Breitenfaktor ist 1; Die DWG wurde bisher noch nie 3D betrachtet; Der Text ist nicht zu nah am Rand; Die Z-Koordinate des Textes ist 0“. Ist die erste Bedingung nicht erfüllt, so sind in der WMF Linien, die den Text beschreiben. Ist eine der anderen Bedingungen nicht erfüllt, so enthält die WMF eckige Polygonbruchstücke, die die Datei sehr aufblähen. Außerdem ist es wichtig, dass die Linienstärken nicht angezeigt werden. Wird eine WMF erstellt, bei denen die Linienstärken im Modell angezeigt werden, enthält die WMF sehr schmale Polygone mit irgendwelcher Dicke, die nicht gewünscht ist.
Markiere die zu exportierenden Objekte und exportiere sie als WMF.

 

Datei finden
Das Makro findet die Datei im Ordner des Worddokumentes, wenn diese a.wmf heißt.
Ansonsten öffnet sich der Explorer zum Datei suchen.
Modifikationsmöglichkeiten:
In Word entscheidet das linke Zeichen darüber, ob die WMF abweichend bearbeitet werden soll. Alternativ können auch 2 Zeichen markiert werden, um 2 Modifikationen zu erreichen. Es gibt folgende Modifikationen.

Nichts ist Standard und wandelt alle Hauptfarben in Schwarz um.

  • r wendet keine CTB an.
  • p schneidet die Zeichnung nicht zu.
  • z schreibt die Berechnungszeit auf.
  • i verwendet eine andere Stifttabelle
  • j komprimiert die WMF verlustbehaftet
  • d und h, um die Strichstärken zu verdoppeln oder halbieren

Ab PowerWMF2.3 können bei bereits umgewandelten WMF die Modifikationen d, h und p nachgeholt werden, anstatt dass man die WMF erneut mit AutoCAD erstellen muss. Modifikation d und h ändern die Strichstärke um 2/3. P vergrößert den Ausschnitt um 10%.

 

WMF auflösen und in Tabelle schreiben
Gemäß der Dateispezifikation wird der gesamte Inhalt der Datei in eine Tabelle eingelesen. Die Datei wird überflüssig und es wird nur noch an der Tabelle gearbeitet.
Es gibt 2 Tabellen. Die eine ist für Texte und die andere für andere (geometrische) Objekte. Die Texttabelle besteht aus den Variablen Textrekord()$, Textfont()$ und Texteigenschaften(;10)%. Die anderen Objekte werden in Georekord()$ mit den Geoeigenschaften(;14)% aufgelistet.

In der Tabelle Geoeigenschaften wird folgendes aufgelistet:

  1. Typ
  2. Füllerstil
  3. Dicke
  4. Füllerrot
  5. Füllergrün
  6. Füllerblau
  7. Pinselstil
  8. Pinselrot
  9. Pinselgrün
  10. Pinselblau
    Hilfsvariablen für den Bedarf. Der Inhalt wandelt
  11. erster PunktX, kleinster PunktX, Füllernummer
  12. erster PunktY, kleinster PunktY, Pinselnummer
  13. letzter PunktX, größter PunktX
  14. letzter PunktY, größter PunktY
  15. hier war ein Text

In der Tabelle Texteigenschaften wird folgendes aufgelistet:

  1. Typ
  2. Rot
  3. Grün
  4. 3: Blau
  5. Textausrichtung
  6. Textabdecken
  7. Abdeckrot
  8. Abdeckgrün
  9. Abdeckblau
  10. Zusätzlicher Abstand zwischen den Buchstaben
    Hilfsvariablen für den Bedarf. Der Inhalt wandelt
  11. erster PunktX, kleinster PunktX, Füllernummer

PowerWMF legt Schwerpunkt auf geometrische Objekte. Bitmapobjekte werden nicht gesondert behandelt und nur als Beiwerk mitgeschleppt. Damit gehen möglicherweise Informationen über Bitmaps verloren.

 

Zuschnitt bestimmen
PowerWMF wertet alle Objekte aus und sucht darin nach den größten und kleinsten Koordinaten

 

Liniendicke ermitteln
Mit den maximalen Koordinaten wird die Zeichnung zugeschnitten und der Zoom ermittelt (Modifikation p unterdrückt diese Option). Der Zoom richtet sich nach der häufigsten Schriftgröße in der Grafik und welche Schriftart am Cursor in Word ist. Hat die Grafik keinen Text, dann wird gemeckert und die WMFschriftgröße nach dieser Formel berechnet:
WMFschriftgröße = 1 + FensterX * WordSchriftgröße / ((Log(Dateilenge) - 5) * 60)
Darin geht die maximale X-Koordinate ein und die Dateigröße. Bei kleinen Dateien ist der Text verhältnismäßig zum Fenster sehr groß.
Mit der Schriftgröße wird der Zoom berechnet. Dadurch ist der Text in der Grafik genauso groß wie in Word.
Anhand des Zooms wird die relative Liniendicke „Verdicken“ berechnet.

 

Objekte nach obenlinks schieben
Wurde die Zeichnung nicht nach oben links geschoben, dann war dort 5 Jahre lang eine breite weiße Fläche. PowerWMF3 hingegen macht das, was der Nutzer früher machte. Alle Objekte werden nach oben links geschoben, sodass alle Objekte in der Nähe des Koordinatenursprungs sind. Es entsteht ein perfekter Zuschnitt rund um die Grafik.

 

Linienfarben umwandeln
Schwarze Linien ohne Makro aus AutoCAD haben die Linienstärke 0 und werden nur von Word mit einer Strichstärke gedruckt. Von PDF aus sind sie unendlich dünn. Zeigt man sich bei AutoCAD die Linienstärken an, so wird jede Linie in speicherlastige Doppeldreiecke umgewandelt. Deshalb sollen Linienstärken auf dem Bildschirm ausbleiben. Das Makro wandelt die Farben wie in einer CTB in native Strichstärken um. Der Speicherbedarf steigt für jede umgewandelte Linienstärke um 0 Byte. Die Füller im WMF haben sowohl eine Farbe, als auch eine Stärke.

Die Farben haben folgende relativen Strichstärken und Farben umgewandelt:

Farbe

geänderte Farbe

Strichstärke

weiß

weiß

2

gelb

schwarz

1

magenta

schwarz

1 +1·I

rot

schwarz

1 (3)

cyan

schwarz

2

grün

schwarz

1,5

blau

schwarz

3

schwarz

schwarz

2 +2·I

dunkel (18;18;18)

weiß

3

sonstige

sonstige

2

I=1 für Modifikation I

Modifikation R unterdrückt diese Option

 

Füllfarben umwandeln
Farbige Texte und Flächenfüllungen werden geschwärzt. Schwarze Flächen werden weiß, weil der Hintergrund in AutoCAD schwarz ist und das Papier jedoch weiß ist. Ohne diese Umwandlung hat man in der WMF schwarze Texte auf schwarzem Textabdecken. Das Makro wandelt beim wiederholten Einfügen die Farben nicht erneut um, sondern erkennt an dem Schlüsselwort „SimonPie“, dass die Datei bereits umgewandelt wurde. Die Datei wird unverändert bzw. mit Modifikation d, h oder p eingefügt.

 

Pixel umwandeln
Jede Maßkette hinterlässt 3 Pixel in der WMF. Sind diese rot (gelb bei Modifikation I), so werden sie entfernt. Jede Strichpunktlinie hinterlässt auch Pixel. Diese werden in Kreislein verwandelt. Bei jedem Pixel, der in einen Kreis umgewandelt wurde, ändert sich die Dateigröße um 0 Byte und die Entropie steigt. Bei jedem gelöschtem Pixel werden 14 Byte eingespart und die Entropie reduziert.

 

Müllhaufen wegkehren
Jeder Text wurde von einem gigantischen 250 Byte schweren Müllhaufen zugeschüttet. Dieser besteht aus Füller kreieren, wählen, wegwerfen, alten Füller kreieren, wählen, Pinsel kreieren, wählen, wegwerfen, alten Pinsel kreieren, wählen, Texthintergrundoption = abdeckend, Texthintergrundoption = farblos, Textfarbe = schwarz, Textfarbe = Nutztext, Font definieren, benutzen, wegwerfen… Dieser Müllberg wird in mehreren Teilschritten weggegehrt. Diese sind:

  • MText sprengen
  • Füller und Pinsel aussortieren
  • Font recyceln
  • Textfarbe wiederverwerten
  • Texthintergrundoption nur einmal Dateianfang schreiben
  • nutzlose Objekte um den Text löschen

Während die Müllabfuhr in PowerWMF2.3 sehr aufwendig programmiert war, ist bei PowerWMF3.0 nur noch das MText sprengen übrig geblieben. Der Müll verschwindet durch den intelligenten Algorithmus von selbst.
Mtexte werden in Texte umgewandelt, wenn diese nicht den Rand berühren. Beim MText benötigt jedes Zeichen zusätzlich ein Doppelbyte. Dieses Doppelbyte sorgt dafür, dass der MText bei jeder Zoomstufe die gleiche Länge hat. Eine Überschrift, kann daher in Word noch reinpassen, während sie im Druck abgeschnitten wird. Bei kurzen Texten sind die Doppelbytes nicht notwendig.
Die Datei und Entropie nehmen ab.

 

Geometrische Datenkompression
Die geometrische Datenkompression besteht aus 2 Gruppen. Die eine Gruppe befasst sich mit der Interaktion zwischen 2 Polylinien und die andere Gruppe bearbeitet Polylinien selbst.

Die Interaktionsgruppe besteht aus:

  • doppelte Linien löschen
  • Schraffuren verbinden
  • berührende Schraffuren verbinden
  • überlappende Linien einen
  • berührende Linien verbinden
  • unsichtbare umrandete Farbpolygone und farbige Hohlpolygone verschmelzen

Die Polygongruppe besteht aus

  • Rechtecke erkennen
  • Ellipsen erkennen
  • runde Rechtecke erkennen
  • Ellipsenbögen erkennen
  • gradlinige Punkte Löschen
  • dreieckige Vierecke

Die Polygongruppe wird von der Funxion Polyglätten erledigt.

 

umschließendes Rechteck
Um Schraffuren zu verbinden, ist es gut, wenn in die Eigenschaften das umschließende Rechteck gespeichert ist. Auf dieses wird zugegriffen und überprüft, ob die beiden Polygone überhaupt interagieren können. Ein Dreieckchen unten und ein Viereck oben haben keine gemeinsamen Punkte. Das umschließende Rechteck spart Rechenzeit, da PowerWMF bei zerbrochenen Texten mehrere Minuten brauchen würde.

 

Schraffuren verbinden
AutoCAD zerschießt alle Schraffuren zu Dreiecke. Diese wurden in PowerWMF2.3 nur zu Vierecke verbunden, um das Problem zu halbieren. Jedes Dreieck belegt 20 Byte und ein Viereck benötigt 24 Byte. Damit ergibt sich eine Ersparnis von 16 Byte, die die Entropie kaum reduziert. Textabdecken von Maßketten hinterlässt 2 Doppeldreiecke. Bilden 2 Dreiecke ein Rechteck, so tauscht das Polyglätten diese gegen ein Rechteck aus. Ein Rechteck benötigt nur 14 Byte und die Einsparung liegt bei 26 Byte. Die Entropie sinkt geringfügig. Der neue Algorithmus von PowerWMF3 macht bei Vierecke weiter. Im besten Fall kann eine zersplitterte Schraffur wieder zusammengeflickt werden und mit seiner Umrandung verschmelzen.

 

berührende Polygone zu überschlagene Polygone verbinden
Während bei Schraffuren verbinden beide Polygone 2 Punkte gemeinsam haben, haben berührende Polygone nur einen Punkt gemeinsam. Es werden die Nachbarpunkte mit einem Kreuz verbunden. Liegt das Kreuz auf dem gemeinsamen Punkt, dann wird dieser gelöscht und beide Polygone zu einem überschlagenen Polygon geeint. Z.B. wenn sich 2 Pfeilspitzendreiecke berühren wird daraus ein überschlagenes Viereck. Die Entropie sinkt spürbar.

 

Endpunkte speichern
Wie beim umschließenden Rechteck dient dies dazu, den Rechner zu beschleunigen. Würde das Einfügen 3 Sekunden dauern, dann ist dies schon eine unerträgliche Geduldsprobe, die zu gefährlichen Panikklicks führt.

 

Linien mit der Farbe 80;102;101 in Pfeile verwandeln

Polylinien mit der Farbe 77;97;223 in schriftlose Polymaßketten verwandeln
Damit ich meine Pfeile und Maßketten des WMFzerlegers auch in PowerWMF nutzen kann, müssen diese eine ganz spezielle Farbe haben. Die Pfeile und Maßketten des WMFzerlegers sind extrem speichersparend und die Pfeilgröße passt zur Textgröße.

 

doppelte Linien entfernen
Es werden alle doppelten Polylinien und Polygone gesucht und gelöscht. Für jede gelöschte Linie werden 16 Byte Luft abgelassen. Doppelte Linien werden nur gelöscht, wenn der Füller der unteren Linie nicht dicker ist. Da dieser Teil so furchtbar langsam ist, werden die Linien in 2 Gruppen eingeteilt: mitteldicke Linien und andere Linien. Weiterhin wird zwischen Linien mit 2 Punkte und mehr Punkte unterschieden. Die Endpunkte werden auch zur Beschleunigung genutzt. Die Variable Geduld ist auf 200 gesetzt, das heißt, dass die beiden Polylinien maximal 200 Objekte auseinander liegen.
Als Entropie wird hier der Speicherbedarf der gezippten WMF bezeichnet.
Als Luft ablassen wird ein Ergebnis bezeichnet, das dem Deflate-Algorithmus gleich kommt und nur die Dateigröße reduziert, ohne dass sie im gezippten Zustand nennenswert kleiner wird. Word speichert WMF gezippt. Entropiereduxion ist daher besser als nur Luft ablassen.

 

überlappende Linien verbinden
Überlappende Polylinien, die mit dem gleichen Füller gezeichnet sind und 2 Punkte haben, werden durch eine ersetzt. Da der Algorithmus so langsam ist, wird erstmals ermittelt, welche Linien in Frage kommen. Dann werden alle horizontalen und vertikalen Linien überprüft. Jede gelöschte Linie erleichtert die Datei um 16 Byte. Handelte es sich um eine doppelte Linie, so wird nur Luft abgelassen. Hatten die überlappenden Linien jedoch unterschiedliche Endpunkte, so sinkt auch die Entropie.

 

Linien zu Polylinien verbinden
In einer WMF gibt es nur Polylinien. Eine Linie besteht aus 2 Punkten. Jeder Punkt in der Polylinie benötigt 4 Byte. Haben 2 Polylinien einen gemeinsamen Endpunkt und den gleichen Füller, so werden sie geeint. Jede Vereinigung lässt 12 Byte Luft ab. Dieser Algorithmus muss nach den überlappenden Linien folgen, weil der Algorithmus der überlappenden Linien nur 2Punkt Polylinien bearbeitet.

 

viereckige Dreiecke beheben
AutoCAD erzeugt Polygone, bei denen der Anfangs und Endpunkt gleich sind. Das Problem liegt nicht nur an AutoCAD, sondern auch am Nutzer, der diese Polygone falsch gezeichnet hat. Zum Schließen des Polygons klickt man nicht auf den Endpunkt, sondern man muss ein Befehl zum Schließen verwenden! Ein Dreieck dadurch also 4 Ecken. Dieser Endpunkt ist überflüssig und wird gelöscht und 4 Byte eingespart. Wenn eine Polylinie gleiche Endpunkte hat, dann wird diese in ein durchsichtiges Polygon verwandelt und ein Endpunkt gelöscht.

 

unsichtbar umrandete Farbpolygone mit durchsichtige Polygone verschmelzen
Ein gefülltes Rechteck wird von AutoCAD schwer beschädigt. Das Rechteck zerfällt in ein durchsichtiges Polygon, das nur seine Umrandung hat, und in 2 Dreiecke, die nur die Füllung haben. Schraffuren verbinden macht aus den Dreiecken wieder ein Polygon. Sind die beiden Polygone identisch, dann werden sie wieder zu einem verschmolzen, das eine Füllung und eine Umrandung hat. Die Datei wird um ein Polygon kleiner.

 

Kreise wiederherstellen
AutoCAD zerschießt Kreise (und Ellipsen) zu Polygone. Das Makro prüft seit seiner ersten Version alle Polygone, ob diese eigentlich Kreise sind und rekonstruiert diese. Der Speicherbedarf und die Entropie sinken stark. Dieser Vorgang ist verlustbehaftet, da auch alle tatsächlichen Achtecke zu Kreise werden.

 

Überflüssige Punkte auf Polylinien entfernen
Unter bestimmten Bedingungen kommt es vor, dass die Punkte einer Polylinie auf einer Geraden liegen. Für die Darstellung einer Geraden sind nur ein Anfangspunkt und ein Endpunkt erforderlich. Alle Punkte dazwischen können gelöscht werden. Ist verlustbehaftete Modifikation aktiviert, dann ist für das Löschen ein doppelter Abstand erlaubt. Das Punkte löschen ist für schräge Polylinien grundsätzlich eine verlustbehaftete Sache. Durch die Vernichtung von Daten werden Dateigröße und vor allen die Entropie gesenkt.

 

Polyglätten für andere Objekte
Ab der Version 2.2 wird unter der Funxion Polyglätten das Punkte Löschen mit dem Kreise Wiederherstellen gesammelt. Damit ist das Umwandeln von Polylinien in andere Objekte vom Hauptprogramm ausgelagert. Polyglätten erkennt neben Ellipsen auch abgerundete Rechtecke, Bögen und Chords. Polyglätten wird in einem eigenen Kapitel genauer beschrieben. Polyglätten komprimiert die Datei sehr kraftvoll und senkt die Entropie stark.

 

Textabdecken mitnehmen
Lagen in der Datei Text und ein weißes Abdecken nebeneinander, dann werden die Abdeckungen gesammelt und ans Ende vor den Texten gestellt. Da die weißen Abdeckungen demselben Füller haben, wird dieser nur einmal gewählt und damit viel Luft abgelassen.

 

Preader aktualisieren und Setwindow setzen
Hier wird der Zoom und das Zuschneiden durchgeführt. Außerdem wird die Signatur eingefügt und meine 3 großen Werke: PowerWMFeinfügen3.0; Plattenbeulen; Kampfkrafttheorie gewürdigt. Das Programm darf unter der General public Lizenz frei benutzt, kopiert, verändert oder erweitert werden.

In der AutoCAD-WMF erscheint deshalb oben links dieser winzig weiße Text in 3 Zeilen:
SimonPie - PowerWMFeinfügen3.0
Plattenbeulen; Kampfkrafttheorie
trage zwischen die Anführungsstriche deinen Namen ein
Die dritte Zeile ist dem Schöpfer der Grafik gewidmet und der Text darf in dem Quellcode geändert werden - die anderen beiden Zeilen bitte nicht ändern. Die Texte dürfen gelöscht oder verändert werden, wenn die WMF mit einem anderen Programm nachbearbeitet wird oder für einen höheren Zweck wie z.B. Firmenlogos verwendet wird.

 

WMF-Tabelle neu erstellen
AutoCAD nimmt einen Füller, malt damit und wirft ihn weg. Das gleiche passiert mit Pinseln und Fonts. In der WMF können diese auch beiseitegelegt werden. Deshalb werden alle Füller, Pinsel und Fonts in der Datei eingesammelt und am Anfang der Datei in einer Federtasche, Tuschkasten und Fontmappe geordnet. Jeder Füller benötigt 16 Byte, jeder Pinsel 14 Byte und jeder Font 56 Byte. Löschen benötigt auch nochmal 8 Byte. Durch das Ordnen wird gewaltig Luft abgelassen.

 

verlustbehaftete Datenkompression
Ist die Modifikation j gewählt, werden alle Objekte nach ihren Füllern sortiert. Somit wird jeder Füller nur einmal in der Hand genommen. Es fallen sehr viele Objektwahlen weg. Jede Objektwahl benötigt 8 Byte. Es wird spürbar viel Luft abgelassen, jedoch auf Kosten der Zeichenreihenfolge. Das was hinten war, kann jetzt vorne sein. Verlustbehaftete Datenkompression ist verlustfrei, wenn alle Objekte schwarz sind und erreicht eine Extrakompression von 10%.
Verlustbehaftete Datenkompression erkennt außerdem mehr Ellipsen und löscht mehr Punkte auf einer Geraden.

 

Texte sortieren
Die Texte werden nach ihrem Font sortiert, sodass jeder Font nur einmal angewählt werden muss. Der Algorithmus entspricht der verlustbehafteten Datenkompression, aber da Texte sich nicht gegenseitig verdecken, entsteht keine äußerliche Änderung. Dies spart Dateigröße und ein bisschen Entropie.

 

Texte ans Ende stellen
Zwischendurch wurden die Lücken in den Listen wegsortiert. Da ein Text mit seiner Farbe und seinem abdeckenden Rechteck nie selbst verdeckt wird, werden diese an das Ende der Datei gestellt. Das Rechteck wird mit einem unsichtbaren Füller gezeichnet. Dadurch, dass dieses mit an das Ende kommt, werden 2 Füllerwechsel von 2*8 Byte und etwas Entropie eingespart. Gibt es sehr viele Texte in der Datei, bei denen das Abdecken fehlt, so kann manuell mit dem Hexeditor das native Textabdecken am Anfang der Datei eingeschaltet werden. Natives Textabdecken benötigt einmal zusätzlich 0 Byte, während jedes Rechteck von AutoCAD 14 Byte benötigt.

 

Datei neu aufbauen
Die WMF wird neu zusammengebaut und der Header korrekt berechnet. Die Datei wird überschrieben und in Word eingefügt.

Druckversion | Sitemap
cc-by-sa; Simon Pie