PatchWorks

PatchWorks



Was?

Patchworks setzt Bilder aus vielen kleinen Bildchen zusammen.
Hier steht, wie's geht.
Sollte ein Fehler in dieser Dokumentation oder im Programm selber auftauchen, oder Sie können eine Fehlermeldung nicht nachvollziehen, oder haben einfach nur eine Frage...
Scheuen Sie sich nicht, mir eine e-Mail zu schreiben.
PatchWorks als Programm und Quellcode steht auf www.caligamedia.de zur Verfügung.


Wie?

Aufruf

Patchworks wird auf der Konsole aufgerufen.
Unter Windows: Start / Ausführen, cmd, OK
Wechseln Sie in das Verzeichnis in dem sich patchworks.exe befindet.
Beispiel:
d:
cd d:\patchworks
wechselt in das Verzeichnis D:\patchworks

Datenbank anlegen

Als erstes muss eine (oder mehrere) Datenbank angelegt werden.
Syntax:
patchworks -newdb [DBpath/]name [Resolution [y-Resolution [DPI]]]

Beispiele:
patchworks -newdb myDB
Legt eine Datenbank namens "myDB" im aktuellen Verzeichnis an (also z.B. D:\patchworks\myDB )
Da für die Auflösung keine Parameter angegeben wurden, werden Standardwerte verwendet.
Die Standardwerte betragen 32*32 Pixel. So groß werden die "Patches", die in dieser Datenbank abgelegt werden.
DPI ist nicht wichtig und kann immer weggelassen werden. DPI beträgt Standardmäßig 100.

patchworks -newdb C:\myDB
Legt die Datenbank "myDB" auf C:\myDB an

patchworks -newdb myDB 50
Legt eine Datenbank namens "myDB" im aktuellen Verzeichnis an.
Die Auflösung der Patches wird mit 50*50 Pixel festgelegt.
Die maximale Auflösung für Patches beträgt etwas über 4000*4000 Pixel, jedoch ist das keine wirkliche Einschränkung da Patches über 100*100 nicht sehr sinnvoll sind.

patchworks -newdb myDB 40 30
Legt eine Datenbank namens "myDB" im aktuellen Verzeichnis an.
Die Auflösung der Patches wird 40*30 Pixel.
Da die Patches nicht quadratisch sind, wird ein später erstelltes Patchwork (in diesem Beispiel) im Verhältnis 4:3 gestaucht. Um dies auszugleichen kann das Quellbild vorher in y-Richtung auf 133,3% (4/3) skaliert werden.


Datenbank mit Bildern füllen

Um ansprechende Ergebnisse zu erzielen, werden viele Bilder benötigt. Ein paar hundert, besser ein paar tausend.
Wer nicht über ausreichend eigene Bilder verfügt, kann zum Beispiel mit der google-Bildersuche recht bequem an viele Bilder kommen. Wenn die Patches nicht zu groß sind (also z.B. 32*32) reichen eventuell sogar die Vorschaubildchen aus.
In der aktuellen Version können leider nur Truecolor Bitmaps (24bit BMP) verwendet werden. JPGs oder andere Bildformate müssen also vor dem einlesen konvertiert werden. Um dies automatisch zu erledigen eignet sich zum Beispiel die Batchfunktion von IrfanView. Tipp: da Bitmaps viel Platz belegen ist es sinnvoll, die Bilder beim konvertieren auch gleich skalieren zu lassen.
Liegen also genügend Bitmaps vor, kanns losgehen. Die Bilder werden eingelsen und in der angegebenen Datenbank gespeichert. Falls die Auflösung eines Bildes noch nicht mit der in der Datenbank festgelegten Auflösung übereinstimmt, wird es entsprechend skaliert. (In der aktuellen Version wird nur verkleinern unterstützt, Bilder die zu klein sind werden übersprungen.)
Syntax:
patchworks -addDB [DBpath/]name path[/xxxx.bmp]

Beispiele:
patchworks -addDB myDB myBMPs
Fügt alle Bitmaps aus dem Verzeichnis myBMPs der Datenbank myDB hinzu.

patchworks -addDB C:\myDB C:\mypics\myBMPs
Falls sich die Datenbank oder das Bildverzeichnis nicht im aktuellen Verzeichnis (im Beispiel D:\patchworks) befinden, müssen Pfade angegeben werden.

patchworks -addDB C:\myDB C:\mypics\myBMPs\holiday.bmp
Wenn nicht alle Bilder eines Verzeichnises eingelesen werden sollen, kann auch eine einzelne Datei angegeben werden.


Datenbank löschen

Es ergibt zwar überhaupt keinen Sinn, aber man kann eine Datenbank auch wieder löschen...
Das löschen einzelner Patches in einer Datenbank wird momentan noch nicht unterstützt.
Syntax:
patchworks -delDB [DBpath/]name [Force]

Beispiele:
patchworks -delDB myDB
Löscht die Datenbank myDB. Eventuell muss natürlich wieder ein Pfad angegeben werden.

patchworks -delDB myDB force
Durch den Parameter "force" wird die Sicherheitsabfrage unterdrückt. Nützlich für Skripte.


Patchwork erstellen

Endlich! Wir erstellen ein Patchwork. Benötigt wird ein Quellbild (Truecolor Bitmap) und mindestens eine Datenbank. (max. 10)
Das Quellbild sollte nicht zu groß sein. Sind die Patches der Datenbank z.B. 32*32 Pixel groß und das Quellbild ist 300*200, so wird das Zielbild 9600*6400 Pixel groß.
Syntax:
patchworks source.bmp target.bmp TOLERANCE patchDB1 ... patchDB10

Beispiele:
patchworks portrait.bmp patchwork.bmp 3.5 myDB
Setzt das Quellbild "portrait.bmp" aus den Patches in der Datenbank "myDB" zusammen und speichert das Ergebnis als "patchwork.bmp" ab.
Der Toleranzparameter gibt an, um wie viel ein Patch schlechter "passen" darf um trotzdem verwendet zu werden. Wird z.B. 0 angegeben, verwendet PatchWorks immer den am besten passenden Patch. Das Zielbild sieht (aus einiger Entfernung) dann dem Quellbild sehr ähnlich. Allerdings tauchen einige Patches dann sehr oft auf, das Bild ist etwas eintönig. Der (wenig sinnvolle) Wert 100 würde jedes Bild in der Datenbank zulassen. Wenn die Datenbank recht klein ist, ist das Ursprüngliche Motiv nicht mehr zu erkennen.
Sinnvolle Werte für die Toleranz liegen zwischen 0.0 und 10.0. (Empfohlen: 5.0)
Für Neugierige: Intern verwendet PatchWorks keine Prozentangabe sondern Werte von 0 bis 765 (3*255). Dieser Wert gibt die Abweichung eines Patches vom zu ersetzenden Pixel an, als Summe aller 3 Farbkanäle an. Die Angabe 0,135 würde also zulassen, dass ein einziger Farbkanal um einen Zähler abweicht. 2 Zähler für 0,27 (auf einem Kanal oder jeweils einen Zähler auf 2 Kanälen).

patchworks portrait.bmp patchwork.bmp 3.5 myDB myDB2 Holiday2004 Robots
Hier werden 4 Datenbanken verwendet um das Patchwork zu erstellen. (myDB, myDB2, Holiday2004, Robots)
Die Reihenfolge in der die Datenbanken angegeben werden kann eine kleine Rolle spielen: Wenn Patches in 2 Datenbanken genau gleich gut passen, wird die zuerst angegebene bevorzugt. (Es sei denn, der Patch in der bevorzugten Datenbank wurde bereits öfter verwendet als der andere)


PseudoPatchwork erstellen

Hierfür ist nur ein Quellbild erforderlich, keine Datenbanken.
Mit Hilfe eines PseudoPatchworks kann man grob abschätzen, wie ein Patchwork mit einer Datenbank mit z.B. 1000 Bildern aussehen wird.
Hierzu wird sozusagen eine PseudoDatenbank angelegt, die einfach aus 1000 Zufallsfarben besteht. Statt Bildern werden also einfarbige Flächen als Patches verwendet.
Syntax:
patchworks source.bmp target.bmp pseudo [Colorcount [Resolution [y-Resolution]]]

Beispiele:
patchworks portrait.bmp patchwork.bmp pseudo 10000 5
Es werden 10000 Zufallsfarben generiert, die als Patches von 5*5 Pixeln verwendet werden.
Größere Patches sind nicht sehr sinnvoll, sehen tut man sowieso nichts...

patchworks portrait.bmp patchwork.bmp pseudo
Da keine Werte für Farbzahl und Auflösung angegeben wurden, werden Standardwerte verwernet:
Es werden 100 Zufallsfarben generiert, die als Patches von 32*32 Pixeln verwendet werden.


Zukunft

Für zukünftige Versionen geplant:

Version History

Version 1.0, 2004-01-29

First "completely" working Version. However buggy.

Version 1.5, 2004-02-29