Ich wollte hier mal mein halbfertiges Hobby-Projekt vorstellen, der "Quiltator". Ich finde es schon ganz nützlich, aber da ist
wohl noch einiges zu tun. Nichtsdetotrozt bin ich grad so freudig, dass ich es schonmal "rumzeigen" will.
Worum es geht:
Wenn man aus Photos sich wiederholende Texturen erstellen will, bekommt man immer sehr schnell sichtbare Ränder. Die kann man entweder mit Photoshop und dem Stempel händisch retuschieren, oder jetzt den Quiltator probieren
Ziel ist es also, aus einem gegebenen Bildausschnitt eine Textur zu erstellen, die sich ohne sichtbare Übergänge wiederholt und sich damit gut als Textur für 3D Objekte oder als Hintergrund von Webseiten verwenden lässt.
Dazu einfach ein Bild öffnen, einen Bereich auswählen und an den Schiebereglern einen "Overlap" einstellen. Dieser Overlap definiert in etwa den Bereich, der überlagert wird um Ränder zu "verstecken".
Wenn das Resultat hässlich ist, einfach am Overlap spielen, bis es besser ist. Da gilt es meist eine optimale Einstellung zu finden...
Technische Details:
Das ist jetzt mein erstes Cocoa Projekt, wo ich versucht habe, komplett auf Xcode zu verzichten. Alles wird in CMake gebaut, was auch ganz gut klappt. Ich finde das angenehmer, weil ich so nur Konfigurationsdateien habe, die nur das wesentliche enthalten. Ausserdem finde ich mich so besser zurecht, ich weiss wo ich was anpassen muss und ich muss nicht an fünf verschiedenen Stellen irgendwelche Einstellungen suchen. Ausserdem habe ich das Gefühl, dass CMake das mit dem Dependency-Tracking etwas besser hinbekommt.
Das Projekt ist dann aufgeteilt in die Cocoa-GUI Anwendung, und eine static library in C++, welche die Bildberechnungen durchführt. Die Lib ist so aufgebaut, dass ich nur ein CGImageRef und die Parameter reinstecke und ich nach einer Weile ein neues CGImageRef zurückbekomme.
Für die GUI hab ich eigene Views gebaut, die die Darstellung übernehmen und die Auswahl erlauben. Es geht zwar noch nicht soviel wie mit IKImageView, dafür war es aber einfach, das Auswahlrechteck so zu zeichnen, dass man den Overlap sieht. Ein Fullscreen-Modus, der das Ergebnis gekachelt darstellt war dann auch recht einfach umzusetzen. Mich hat ja an IKImageView genervt, dass ich keine ordentlichen ScrollBars bekomme, das war aber auch hier nicht ganz einfach und ich musste auf eine eigene NSClipView Klasse zurückgreifen (Code habe ich von hier angepasst, damit alles etwas schöner und mit Schatten dargestellt wird). Dargestellt werden immer nur CGImageRefs, das ist glaube ich auch ganz gut so. Ich bin gerade erst am entdecken, was man alles schönes mit CoreGraphic (Quartz...) anstellen kann. Das werde ich bestimmt noch etwas ausbauen.
Grundidee für den Algorithmus habe ich von diesem etwas älteren Siggraph Paper. Um so kachelnde Texturen zu erzeugen, wie ich das will, hat sich das ganze aber noch um einiges vereinfacht. Aber ein paar Dinge muss ich noch verbessern, manchmal sieht man z.B. die Ränder immer noch sehr deutlich, da könnte man mit etwas Blending rangehen.
Was fehlt noch?
Naja, ein wenig "Polish" wie Icons etc. Auch hab ich bestimmt noch Leaks und nicht alle potentiellen Dummheiten des Nutzers abgefangen. Ganz wichtig ist noch eine Zoom-Funktion, denke ich. Das sollte aber an sich recht einfach gehen, muss ja nur das CGImage größer zeichnen. Naja, und der eigentlich Algorithmus könnte noch etwas optimiert werden.
Ausprobieren?
Ein Debug Build für Intel x86 gibt es hier: paste.ioctl.eu/Quiltator-0.1.zip
(ca 400kB). Ich nehme an, dass es 10.6-only ist, habe das aber noch nicht genau geprüft.
Feedback?
Ich finde es ja jetzt schon ganz toll, vielleicht ist es dem einen oder anderem ja auch nützlich, dann würde ich mich natürlich freuen. Verbesserungsvorschläge oder Nachfragen zu Details auch gerne
Vielleicht probiere ich mit dem ganzen ja eines Tages mal den Mac AppStore. Vielleicht lässt sich da ja noch was rausschlagen
Aber bevor ich es jetzt abhake als "Funktioniert soweit" und es in den Tiefen meiner Platte verschwindet, will ich es lieber hier teilen.
wohl noch einiges zu tun. Nichtsdetotrozt bin ich grad so freudig, dass ich es schonmal "rumzeigen" will.
Worum es geht:
Wenn man aus Photos sich wiederholende Texturen erstellen will, bekommt man immer sehr schnell sichtbare Ränder. Die kann man entweder mit Photoshop und dem Stempel händisch retuschieren, oder jetzt den Quiltator probieren
Ziel ist es also, aus einem gegebenen Bildausschnitt eine Textur zu erstellen, die sich ohne sichtbare Übergänge wiederholt und sich damit gut als Textur für 3D Objekte oder als Hintergrund von Webseiten verwenden lässt.Dazu einfach ein Bild öffnen, einen Bereich auswählen und an den Schiebereglern einen "Overlap" einstellen. Dieser Overlap definiert in etwa den Bereich, der überlagert wird um Ränder zu "verstecken".
Wenn das Resultat hässlich ist, einfach am Overlap spielen, bis es besser ist. Da gilt es meist eine optimale Einstellung zu finden...
Technische Details:
Das ist jetzt mein erstes Cocoa Projekt, wo ich versucht habe, komplett auf Xcode zu verzichten. Alles wird in CMake gebaut, was auch ganz gut klappt. Ich finde das angenehmer, weil ich so nur Konfigurationsdateien habe, die nur das wesentliche enthalten. Ausserdem finde ich mich so besser zurecht, ich weiss wo ich was anpassen muss und ich muss nicht an fünf verschiedenen Stellen irgendwelche Einstellungen suchen. Ausserdem habe ich das Gefühl, dass CMake das mit dem Dependency-Tracking etwas besser hinbekommt.
Das Projekt ist dann aufgeteilt in die Cocoa-GUI Anwendung, und eine static library in C++, welche die Bildberechnungen durchführt. Die Lib ist so aufgebaut, dass ich nur ein CGImageRef und die Parameter reinstecke und ich nach einer Weile ein neues CGImageRef zurückbekomme.
Für die GUI hab ich eigene Views gebaut, die die Darstellung übernehmen und die Auswahl erlauben. Es geht zwar noch nicht soviel wie mit IKImageView, dafür war es aber einfach, das Auswahlrechteck so zu zeichnen, dass man den Overlap sieht. Ein Fullscreen-Modus, der das Ergebnis gekachelt darstellt war dann auch recht einfach umzusetzen. Mich hat ja an IKImageView genervt, dass ich keine ordentlichen ScrollBars bekomme, das war aber auch hier nicht ganz einfach und ich musste auf eine eigene NSClipView Klasse zurückgreifen (Code habe ich von hier angepasst, damit alles etwas schöner und mit Schatten dargestellt wird). Dargestellt werden immer nur CGImageRefs, das ist glaube ich auch ganz gut so. Ich bin gerade erst am entdecken, was man alles schönes mit CoreGraphic (Quartz...) anstellen kann. Das werde ich bestimmt noch etwas ausbauen.
Grundidee für den Algorithmus habe ich von diesem etwas älteren Siggraph Paper. Um so kachelnde Texturen zu erzeugen, wie ich das will, hat sich das ganze aber noch um einiges vereinfacht. Aber ein paar Dinge muss ich noch verbessern, manchmal sieht man z.B. die Ränder immer noch sehr deutlich, da könnte man mit etwas Blending rangehen.
Was fehlt noch?
Naja, ein wenig "Polish" wie Icons etc. Auch hab ich bestimmt noch Leaks und nicht alle potentiellen Dummheiten des Nutzers abgefangen. Ganz wichtig ist noch eine Zoom-Funktion, denke ich. Das sollte aber an sich recht einfach gehen, muss ja nur das CGImage größer zeichnen. Naja, und der eigentlich Algorithmus könnte noch etwas optimiert werden.
Ausprobieren?
Ein Debug Build für Intel x86 gibt es hier: paste.ioctl.eu/Quiltator-0.1.zip
(ca 400kB). Ich nehme an, dass es 10.6-only ist, habe das aber noch nicht genau geprüft.
Feedback?
Ich finde es ja jetzt schon ganz toll, vielleicht ist es dem einen oder anderem ja auch nützlich, dann würde ich mich natürlich freuen. Verbesserungsvorschläge oder Nachfragen zu Details auch gerne
Vielleicht probiere ich mit dem ganzen ja eines Tages mal den Mac AppStore. Vielleicht lässt sich da ja noch was rausschlagen
Aber bevor ich es jetzt abhake als "Funktioniert soweit" und es in den Tiefen meiner Platte verschwindet, will ich es lieber hier teilen. ♥C++