Created Samstag, 4. Februar 2012

. . :. :: :.: ::.::: .:. .: : ::: .. :. .:..: :.. ::   [ENGLISH]  [DEUTSCH]  [FRANCAIS]

cdrnet website > ETH Painter Miniprojekt

Personal Website of Christoph Daniel Rüegg
NAVIGATION START »   INTERESTS PROJECTS KNOWLEDGE THOUGHTS ABOUT
CONTENTS .:
1 - Übersicht
2 - Download
3 - UI & Bedienung
4 - Filter
5 - Gallerie
6 - Dokumentation
7 - Architektur
8 - Links
9 - Copyright & Lizenz



please use my contact form to send comments and questions.


Programmers:
Christoph Ruegg
Matthias Bader


Programming Contest
We've won the first prize on the programming contest of the Informatik 1 course using this painter version:

Wettbewerb Urkunde
:. ÜBERSICHT

Der Painter ist eine kleine Applikation zur Fotomanipulation, geschrieben von Matthias Bader und Christoph Rüegg. Sie entstand im Rahmen eines Miniprojektes der Vorlesung Informatik 1 für die Erstsemestrigen des Studiengangs Informationstechnologie und Elektrotechnik der ETH Zürich. Sie wurde mit C++ unter Linux entwickelt und ist auch auf SUN Workstations vollumfänglich lauffähig.
 

:. DOWNLOAD

Der Painter steht unter einer modifizierten BSD Lizenz (mehr dazu am Ende dieses Dokuments) und ist somit inklusive Quelltext frei verfügbar. Er erwartet Tiff Grafiken mit dem selben Namenmuster wie die des beigelegten Tgz Archivs ('Benötigte Bilder') entpackt im Verzeichnis der ausführbaren Datei.

:. Painter Quelltext Linux (ohne Bilder)
:. Painter Quelltext + Kompiliert auf Linux (ohne Bilder)
:. Painter Quelltext Solaris (ohne Bilder)
:. Painter Quelltext + Kompiliert auf Solaris (ohne Bilder)
:. Benötigte Bilder
 

:. UI & BEDIENUNG

Der Aufbau des User Interface basiert weitgehend auf dem der Vorlage. Die Bedienung erfolgt grundsätzlich per Tastatur, die Filter werden per Maus ausgelöst und Parametrisiert.

Zahlentasten 0-9 - Laden
Mit den Zahlentasten können Bilder dynamisch geladen werden. Mit den Tasten '1' bis '7' werden Graustufenbilder geladen, mit '8' bis '0' Farbbilder.

Taste 's' - Speichern
Speichert das aktuelle Bild als out.tif.

Taste 'q' - Beenden
Beendet das Programm ohne speichern.

Tasten 'F1' - 'F4' - Kanalwahl
Mit den Funktionstasten können Farbkanäle aktiviert und deaktiviert werden. Filter werden jeweils nur auf aktive Kanäle angewendet. 'F1' aktiviert alle Kanäle. Mit 'F2' bis 'F4' können die Kanäle Rot, Gründ und Blau seperat ein und ausgeschaltet werden.

Rechte Maustaste - Farbwahl
Bei einigen Filtern kann mit der rechten Maustaste eine Farbe und/oder einen Referenzpunkt ausgewählt werden. Drückt man die rechte Maustaste, erscheint oben eine Farbleiste um den Farbbereich zu ergänzen. Übernommen wird die Farbe des Pixels, auf dem sich die Maus beim loslassen der techten Maustaste befindet.

Linke Maustaste - Aktion
Alle Filter werden mit der linken Maustaste ausgelöst. Einige Filter benutzen den Positionsunterschied der Maus zwischen drücken und loslassen der Maustaste zum Parametrisieren des Filters oder zur Auswahl eines Bildbereiches. Animierte Filter sind bei gedrückter Maustaste aktiv.
 

:. FILTER

Original:


Invert - Taste 'i'
Invertiert den Markierten Bereich des Bilders


Block Fill - Taste 'b'
Füllt den markierten Bereich mit der ausgewählten Farbe aus

Copy Block - Taste 'c'
Kopiert den markierten Bereich an eine beliebige Stelle

Flood Fill - Taste 'f'
Füllt zusammenhängende Bereiche mit ähnlicher Farbe ausgehend von gewählten Pixel mit der ausgewählten Farbe aus. Die Toleranz kann durch verschieben der gedrückten Maustaste parametrisiert werden.


Auto Level - Taste 'l'
Spreizt das Farbspektrum linear, sodass die dunkelste Farbe gerade den minimalen und die hellste den maximalen Wert hat. Empfiehlt sich v.a. nach Filtern wie Noise, Pixel8 und Difference.

Contrast - Taste 'o'
Erhöht den Kontrast des ganzen Bildes.


Difference - Taste 'd'
Rechnet für jeden Bildpunkt die Differenz zur Farbe des gewählten Pixels aus
Tipp: Wählen Sie ein neutrales Grau als Farbe aus!
Tipp: Wenden Sie den Filter mehrmals hintereinander mit leicht unterschiedlichen Grauwerten an.
Tipp: Verwenden Sie nach dem Difference-Filter den Autolevel-Filter!


Edge - Taste 'e'
Findet die Umrisse des Bildes, und färbt diese weiss ein.
Tipp: Halten Sie die Maus gedrückt und ziehen Sie eine kurze Strecke, bevor Sie die Maustaste wieder loslassen, so verändert sich der Effekt.


Grave (Edge Sharpen) - Taste 'g'
Zieht die Linien des Bildes dunkel nach und verstärkt sie ('Einprägeeffekt').
Tipp: Halten Sie die Maus gedrückt und ziehen Sie eine kurze Strecke, bevor Sie die Maustaste wieder loslassen, so verstärkt sich der Effekt.


Noise (Edge) - Taste 'n'
Generiert ein Rauschen, abhängig von lokalen Bilddaten. Monotone Flächen werden durchrauscht während Linien speziell hervorgehoben werden
Tipp: Halten Sie die Maus gedrückt und ziehen Sie eine kurze Strecke, bevor Sie die Maustaste wieder loslassen, so verändert sich der Effekt.



Unsharp - Taste 'u'
Verwischt das Bild um den mit der Maus gezogenen Betrag (mindestens aber 3 Pixel). Achtung: Der Unsharp-Filter ist sehr rechenintensiv. Ziehen Sie keine zu langen Strecken, die Rechenzeit wächst quadratisch.


Mr Bond - Taste 'x'
Rechnet ein anderes Bild an der ausgewählten Stelle ins gegenwärtige Bild ein (hier: Schussloch; die Munition ist nicht begrenzt).


Pixel8 - Taste 'a'
Teilt das gesamte Bild wie ein Mosaik in passend grosse, gleichfarbige Flächen auf.
Tipp: Pixel8 wird 'pixelate' ausgesprochen!


Posterize - Taste 'z'
Reduziert die Farbtiefe und fasst so Bereiche mit ähnlichen Farben in derselben Fläche zusammen.
Tipp: Posterize gibt in Verbindung mit Pixel8 eindrückliche Effekte!
Tipp: Posterize verwendet intern den Unsharp-Algorithmus. Deshalb ist die Rechenzeit höher als bei anderen Filtern.


Refraction - Taste 'r'
Animiert. Verändert das Bild dynamisch, indem es drei (kreisförmige) Wassertropfen simuliert, die von oben nach unten übers Bild laufen.
Tipp: wenden Sie zuerst Pixel8 auf das Bild an, so wird die Funktionsweise des Effekts deutlich sichtbar!


Distort - Taste 'w'
Animiert. Verändert das Bild dynamisch, indem es bestimmte Bereiche um den Cursor herum streckt und staucht. Das Zentrum des Effekts liegt beim Mauscursor.
Tipp: wenden Sie zuerst Pixel8 auf das Bild an, so wird die Funktionsweise des Effekts deutlich sichtbar!


PR - Taste 'p'
Animiert. Verändert das Bild dynamisch, indem er die Farbpalette abhängig von der Umgebung jedes Pixels systematisch verändert.
Tipp: wenden Sie zuerst Grave auf das Bild an, so ergeben sich aussergewöhnliche Effekte!
Tipp: solange die Maus während des Effekts nicht bewegt wird, kehrt das Bild nach einer gewissen Zeit wieder in den Ursprungszustand zurück!

 

:. GALLERIE

Die recht vielseitigen Filter lassen sich teilweise bestens kombinieren und in Reihe anwenden. Mit der folgenden kleinen Zusammenstellungen möchten wir einige Beispiele solcher Kombinationen aufzeigen und zum Spielen mit den Filtern anregen.

:. Painter Gallerie
 

:. DOKUMENTATION

Eine mit doxygen automatisch generierte Dokumentation ergänzt mit einigen nützlichen Hinweisen und Erklärungen.

:. Painter Dokumentation
 

:. ARCHITEKTUR

Grundideen der gewählten Architektur
Ein Bild setzt sich immer aus mehreren Kanälen zusammen. Beim Graustufenbild sind das ein Alphakanal und einen Helligkeitskanal, beim Farbbild setzt sich der Helligkeitskanal aus 3 farbspezifischen Kanälen zusammen. Kanäle können unterschiedliche Rasterungstiefen haben; hier arbeiten wir generell mit 8 bit Kanälen (unsigned char), doch werden an einigen Stellen auch binäre oder 32 bit Kanäle verwendet. Dies führt zur abstrakten Klasse AlphaImage, von der GrayImage als wie auch RgbImage ableiten. Kanäle werden durch die generische Klasse Channel dargestellt.

Die zweite Idee entspringt dem Modell der Surjektivität. Gegeben ist ein Bild. Wendet man darauf einen Filter an erhält man wieder ein Bild. Filter sind somit auch Bilder. Daraus folgt der Kern der Vererbungshierarchie: Alle Filter leiten direkt oder über Umwege von der oben erwähnten generischen Channel Klasse ab. Somit können die Image Klassen statt reinen Kanäle auch Filter als virtuelle Kanäle aufnehmen, wobei die Filter auch in Reihe geschaltet werden können.

Generalisierung von Aspekten
Spezielle Features die für mehrere Filter nützlich sein können wurden mit abstrakte Klassen realisiert. So ermöglicht beispielsweise die Klasse SelectBoxFilter die Auswahl eines Bereiches inkl. Inversion während der Auswahl. SelectDotFilter ermöglicht das Auswählen von Farben mit einer Farbleiste oder von Farben direkt auf dem Bild ('Pipette') und die TransformationFilters übernehmen die Organisation der Buffer für spezielle Anwendungen.

Vereinfachtes UML Klassendiagramm
Das folgende UML Diagramm zeigt die Vererbungshierarchie sowie einige der Assoziationen.

 

:. LINKS

Beiträge von Mitstudenten
:. Thomas Meyer
:. Tomi Cvetic and Moritz Kobel
:. Reto Schwarz

Letztjährige Beiträge (unsere Vorgänger)
:. Adrian Bürli
:. Martin Burri
:. Basile Graf
 

:. COPYRIGHT & LIZENZ

Copyright (c) 2003, Christoph Rueegg and Matthias Bader. All rights reserved.
Partially based on ideas of Tim Weyrich and/or the Swiss Federal Institute of Technology <http://www.ethz.ch>
Using Tifflib, Copyright (c) 1988-1997 Sam Leffler, 1991-1997 Silicon Graphics, Inc.
Using Glut, Copyright (c) 1994-1998 Mark J. Kilgard.

Project Website: http://www.cdrnet.net/projects/painter/

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 

:..: :... ::: : :....: .:.:.: :. . : :... .: ... . :.. .:. ::: :... ::: :
Opensource Web Design - EN, 38.107.179.217 - © 2002 Christoph Ruegg