Fachartikel

In den Jahren 1992 und 1993 erschien eine Artikelserie von mir in PHOTOMED', einer Zeitschrift für die wissenschaftliche Fotografie. Die Leser dieser Zeitschrift - vorwiegend Wissenschaftler - waren keine "Computerfreaks". Entsprechend sind alle Artikel allgemeinverständlich gehalten. Nachfolgend finden Sie alle erschienenen Artikel aufgelistet. Eine kurze Beschreibung zeigt Ihnen, worum es in dem Artikel geht.

Fachartikel

Wenn aus Zahlen Bilder werden

Wenn aus Zahlen Bilder werden

Computergrafik Teil 7: Heft 4/1993 (S. 259)

In fast allen gängigen Computerprogrammen sind Makroprogrammiersprachen enthalten, mit deren Hilfe sich Arbeitsschritte automatisieren lassen. Wenn man diese Möglichkeit nutzt, wird man mit der Programmierung von komplexen Aufgabenstellungen vertraut und kann professionelle Bildbearbeitungssoftware durch selbst programmierte Anwendungen ergänzen.

Autor

Michael Gradias

Michael Gradias
Grafik-Designer und Fotograf
Grafisches Atelier Michael Gradias
Sternhaus
38284 Wolfenbüttel

In den bisherigen Teilen dieser Artikelserie wurden überwiegend die rein grafischen Aspekte der Computerarbeit dargestellt. Im Laufe der vergangenen Jahre hat sich eine weitere, faszinierende Variante ergeben, Mathematik und Grafik durch den Computer zu verbinden. Das gängige Schlagwort dafür lautet "Datenvisualisierung". Da alle Arbeiten am Computer auf reine Mathematik zurückzuführen sind, lag diese Verbindung eigentlich nahe. Dennoch hat es lange Jahre gedauert, die grafischen Fähigkeiten der Rechner mit den mathematischen so zusammenzuführen, daß ansehnliche Ergebnisse dabei entstehen und diese auch konkret verwendbar sind.

Der Anfang wurde mit den inzwischen allseits bekannten Fraktalen gemacht. Diese Muster werden ausschließlich durch mathematische Formeln erzeugt (Abb. 1 bis 3).

Abb. 1 bis 3: Bei Fraktalen handelt es sich um Muster, die ausschließlich durch mathematische Formeln erzeugt werden. Fraktale Formen kommen auch in der Natur vor, zum Beispiel bei Küstenformen. Durch ihre computergenerierte Ästhetik haben sie viel mit gestalteten Grafiken gemein. Die hier gezeigten Fraktale entstanden mit dem Fraktalgenerator "Fractint".

Die Programmiersprachen

Wegen ihrer besonderen Ästhetik haben Fraktale viel mit gestalteten Grafiken gemein. Daher liegt der Versuch von Grafik-Designern nahe, die programmiertechnischen Hintergründe dieser beeindruckenden Bilder zu erforschen. Dabei stößt man auf einige Widerstände. Auf dem Markt gibt es viele verschiedene Programmiersprachen, mit denen man einen sogenannten Quellcode erzeugen kann. Dieser Quellcode wird mit Hilfe von sogenannten Compilern in eine Sprache übersetzt, die der Computer versteht. Im Laufe der Jahre haben sich die Programmiersprachen Pascal, C und Basic auf dem PC durchgesetzt.

Beim Quellcode handelt es sich um eine Textdatei, die Befehle enthält, welche von der jeweiligen Programmiersprache vorgegeben werden. Das sind meist nur wenige Befehle und einige mathematische Syntaxe. Das ist zwar nicht viel an "Werkzeug", beim Beginn der Arbeit merkt man allerdings, daß auch diese wenigen Befehle durchaus ihre Tücken haben. Nur wenn die Befehle in der richtigen Reihenfolge eingegeben werden, erhält man ein funktionierendes Programm.

Informatiker vertreten zwar die Meinung, daß kein Fachfremder ihre Kreise stören darf, spätestens jedoch seit der Einführung von Windows-Programmiersprachen versucht sich fast jeder Anwender als Gelegenheitsprogrammierer. Diejenigen, denen Mathematik und die Lösung logisch zu analysierender Probleme immer gelegen haben, merken bald, daß auch das Programmieren durchaus zu erlernen ist. Programmierung basiert auf klarer Logik und ordentlich strukturierten Programmzeilen.

Der Beginn

Zuerst wird begonnen, die Programmbeispiele zu testen und zu modifizieren. Dabei kann man die Programme Schritt für Schritt ablaufen lassen. Durch diese Möglichkeit läßt sich einfach erlernen, wie Programme aufgebaut sein sollten.

Ein Grafik-Designer wird bei der Programmierarbeit naturgemäß in erster Linie auf die optische Wirkung seines Programms achten (Abb. 4 und 5). Er sollte natürlich nicht vergessen, daß Programme auch funktionieren müssen! Die ersten Programme werden überwiegend sogenannte Utilities sein – auf Deutsch könnte man diese als "kleine Helfer" bezeichnen. Solche Programme bewältigen oft nur sehr wenige Aufgaben. Durch ihre wenigen Funktionen ist der Programmablauf allerdings sehr schnell, und sie bringen den Computer bei korrekter Programmierung seltener zum Absturz als gekaufte Software. Komplexe, käuflich zu erwerbende Programme glänzen zwar mit unendlich vielen Funktionen, dadurch verlieren sie aber an Geschwindigkeit, sind umständlich zu bedienen und nur mit großem Zeitaufwand zu erlernen.

Wenn aus Zahlen Bilder werden

Abb. 4 und 5: Grafiker, die sich auch mit der Programmierung befassen, legen naturgemäß viel Wert auf die Gestaltung der Benutzeroberfläche eines Programms.
Die obere Abbildung zeigt eine Anwendung für die grafische Oberfläche Windows, das unten dargestellte Menü gehört zu einer reinen MS-DOS-Software für die Bildbearbeitung.

Die Vorteile der eigenen Programmierung verleiten die Programmieranfänger oft dazu, neue und leistungsstärkere Versionen ihrer Programme, sogenannte Updates, zu schreiben. Auf dem Softwaremarkt lassen sich die professionellen Programmierer ihre Fehler, die sie bei der verbesserten Update-Version behoben haben, sogar noch teuer bezahlen. Dieses nennt man dann Marktstrategie.

Pixelgrafiken

Die im zweiten Teil dieser Artikelserie beschriebenen Pixelgrafiken haben neben den damals geschilderten "grafischen Nachteilen" programmiertechnisch viele Vorteile. Eine als Pixelgrafik gespeicherte Datei besteht ausschließlich aus Zahlen, die jeden einzelnen Punkt eines Bildes exakt definieren. So wird für jeden Punkt der Farbwert und die Position innerhalb des Bildes vermerkt. Dadurch kann auch jeder dieser Bildpunkte ganz genau angesprochen und verändert werden. So ist es recht einfach – wenn man das Prinzip einmal verstanden hat –, einen bestimmten Punkt des Bildes zu verschieben oder in seiner Farbe zu verändern. Der Pixel kann auch dupliziert oder durch einen anderen Punkt des Bildes ersetzt werden. Mit diesen Varianten arbeiten alle auf dem Markt erhältlichen Bildbearbeitungsprogramme.

In der professionellen Software erhalten diese Pixelveränderungen allgemeinverständliche Namen. Wird jeder Pixel, der in einem Bild enthalten ist, um einen bestimmten Wert in eine hellere Farbe verändert, so lautet der Befehl dafür "Aufhellen".

Durch den Befehl, daß ein Programm jeden Bildpixel um einige Pixel nach oben rechts versetzt duplizieren und dabei jeweils nach rechts und links mit dem angrenzenden Pixelwert vermischen soll, entsteht ein Bild, wie es die Abbildungen 6 und 7 zeigen.

Abb. 6 und 7: Das obere Bild wurde von einer Photo-CD eingelesen und mit Hilfe des Windows-Programmes CorelPaint! in ein "impressionistisches Gemälde" umgewandelt. Mit einigen Grundkenntnissen über die Pixelmodifizierung läßt sich solch ein Effekt selbst programmieren.

Diese Art der Beschreibung soll zeigen, daß sich der Effekt "Impressionismus" durchaus auch für Programmierer verständlich ausdrücken läßt. Außerdem soll verdeutlicht werden, daß es sich bei den Funktionen von Bildbearbeitungsprogrammen nicht um Wunder handelt, auch wenn es die Softwareindustrie in ihren Hochglanzprospekten oft und gerne so darstellt.

Alle Veränderungseffekte, die in diesen Programmen enthalten sind, lassen sich auf einfache Befehle zur Pixelmodifizierung zurückführen.

Die Dateiformate

Ein Problem stellen die unterschiedlichen Dateiformate dar. Zur Zeit haben sich die Farbbilddateiformate TIFF und Targa für Pixelgrafiken im professionellen Bereich durchgesetzt. Alle Dateiformate von Pixelbildern unterscheiden sich im Grundsatz nur sehr wenig voneinander.

So beinhalten lediglich die ersten Zahlen eines gespeicherten Bildes unterschiedliche Informationen. Es kommt vor, daß durch ein Programm als erste Information die Farbanzahl gespeichert wird, während bei einem anderen Programm als erste Information die Bildgröße angegeben wird. Alleine diese winzigen Unterschiede führen zu den allseits bekannten Fehlermeldungen: "Kann die Datei nicht öffnen, da das Dateiformat unbekannt ist".

Mit dem Wissen über die Unterschiede der einzelnen Formate ist es möglich, diese Informationen zu verschieben, um anschließend ein korrektes Dateiformat zu haben. Wie die unterschiedlichen Informationen über Bildgröße, Farbanzahl und Komprimierungsgrad richtig anzuordnen sind, kann man von den Entwicklern dieser Formate erfahren.

Sie sind an einer Weitergabe dieser Informationen sehr interessiert, weil ihr Dateiformat dadurch populärer wird. Leider befinden sich diese Firmen meist in Amerika. Über die Redaktionen von deutschen Fachzeitschriften kann man deren Adressen erfahren. Mit geringen Englischkenntnissen kann der Programmierer so zu den Informationen gelangen, die ihn in die Lage versetzen, unzählige Pixelveränderungen vorzunehmen.

Nun ist es beim Programmieren auch nicht so, daß man z.B. beschließt, eine Programmfunktion zu kreieren, die ein Bild in einen Holzschnitt (Abb. 8 und 9) umwandelt. In der Regel schreibt man zunächst eine Programmroutine die mit unterschiedlichen variablen Zahlen arbeitet. Beim Verändern dieser Zahlen stellt man dann fest, daß dabei ein Bild entsteht, welches wie ein Holzschnitt aussieht. Und durch dieses Ausprobieren ist der Effekt Holzschnitt entstanden, der in Abbildung 9 gezeigt wird. Vorhersagen über ein bestimmtes Ergebnis sind nur selten möglich.

Wenn aus Zahlen Bilder werden
Wenn aus Zahlen Bilder werden
Abb. 8 und 9: Auch die obere Abbildung stammt von einer Photo-CD. Mit Hilfe einer selbstprogrammierten Anwendung wurde dieses Foto in ein holzschnittähnliches Bild (unten) umgewandelt.

Das hat auch zur Folge, daß unter Umständen tagelang Variablen umgestellt werden, ohne daß dabei ein Bildeffekt entsteht, der Ähnlichkeit mit einer bekannten Bildart hat. Lohn der nötigen Ausdauer ist aber die Möglichkeit, am Ende der Arbeit Programme zu erhalten, die die gleichen Funktionen wie sehr teure Bildbearbeitungsprogramme aufweisen (Abb. 10 bis 13). Man hat dabei ferner den Vorteil, daß die eigenen Programme erheblich schneller ablaufen, da sie keinen überflüssigen Ballast wie etwa ausschweifende Hilfeinformationen oder nie benötigte Funktionen enthalten.

Wenn aus Zahlen Bilder werden
Wenn aus Zahlen Bilder werden
Abb. 10 und 11: Dieses Foto wurde mit einer Funktion verändert, die vom Mittelpunkt des Bildes aus alle Pixel so verteilt, als würden sie auf einer Kugel liegen.
Wenn aus Zahlen Bilder werden
Abb. 12 und 13: Bei diesem Foto eines Chinchillas kam ein Befehl zum Einsatz, der die äußeren Pixel des Bildes streckt. Nach innen nimmt dieses Strecken kontinuierlich ab.

Die Vektorgrafik

So einfach Pixelbilder zu verändern sind, so schwierig ist es, dreidimensionale Gebilde, die aus Vektoren bestehen, zu erzeugen. Bisher wurde dargestellt, daß durchaus auch Anfänger bei der Programmierung erstaunliche Ergebnisse erzielen können. Diese Schilderung kann für die dreidimensionale Vektorgrafik nicht aufrechterhalten werden.

Wer sich mit diesem Thema beschäftigen will, muß sehr viel Arbeitszeit investieren, ohne daß es die Garantie für einen Erfolg gibt. Wenn man es dennoch wagt, sich an dieses Gebiet heranzutasten, kann man Aufgaben bewältigen, bei denen sogar professionelle Programme versagen. Über ein entsprechendes Beispiel wurde in Photomed'6: 13-18, 1993 berichtet.

Allerdings sollte diese Art der Programmierung nur dann eingesetzt werden, wenn von Beginn an feststeht, daß käuflich zu erwerbende Programme die vorgegebene Problemstellung nicht bewältigen können. Der Aufwand für diese Arbeit ist enorm und mit vielen anfänglichen Mißerfolgen verbunden. Hinzu kommt die Schwierigkeit, daß über die Programmierung von professionellen High-End-Grafikkarten sehr wenig Literatur vorhanden ist, was die Arbeit weiter erschwert.

Für derartige Anwendungen ist übrigens ausschließlich die Programmiersprache "C" geeignet. Die anderen auf dem Markt erhältlichen Programmiersprachen können derartige Aufgabenstellungen nicht mehr bewältigen, da sie nicht auf jedes Hardwareteil, wie zum Beispiel die speziellen Grafikkarten, zugreifen können.

Shareware-Programme

Für jedermann sind sogenannte Shareware-Programme erhältlich. Diese Art des Softwareverkaufs ermöglicht es, Programme für eine gewisse Zeitspanne, meist vier Wochen, zu testen, um festzustellen, ob man auch weiterhin damit arbeiten möchte. Wenn einem das getestete Programm zusagt, muß man ca. 100 DM als Lizenzgebühr bezahlen, um es weiter nutzen zu dürfen. Danach erhält man Informationen über neue Programmversionen oder Hinweise zur Behebung von sogenannten Bugs, d.h. kleinen Programmierfehlern. Diese Plattform des Programmverkaufs ist in den vergangenen Jahren immer beliebter geworden. Computerfreaks können so einige Mark für ihre Programmierleistung erhalten. Dieser Markt ist für Programmieranfänger sehr interessant, da man hier für sehr wenig Geld Informationen erhält, die am Anfang bei der Bewältigung von Problemen weiterhelfen. Oft ist den Shareware-Programmen nämlich der Quellcode beigelegt.

Ray-tracing

Unter den Shareware-Programmen befinden sich oftmals sogenannte Raytracer. Diese Raytracer berechnen von vorgegebenen dreidimensionalen Vektormodellen die auf den Oberflächen auftreffenden Lichtstrahlen und die dazugehörigen Reflexionen in einer sehr realistischen Art und Weise (Abb. 14 bis 16). Bei diesen billigen, aber trotzdem leistungsstarken 3D-Programmen werden die Arten der zu berechnenden Objekte und deren Lage im Raum angegeben.

Abb. 14 bis 16: Diese drei Bilder entstanden mit Hilfe eines Shareware-Programms. Das Raytracing-Programm ermöglicht es, sehr realistische, dreidimensionale Grafiken zu erstellen. Diese Software wird als sogenannte Kommandozeilenversion bedient. Das bedeutet, daß das Programm mit unterschiedlichen Parametern gestartet werden kann. Da der Quellcode für diese Anwendung ebenso erhältlich ist, kann man das Programm nach den eigenen Bedürfnissen modifizieren.

Schöne Programmenüs fehlen allerdings bei derartigen Programmen vollständig. Sie arbeiten nur in einer sogenannten Kommandozeilenversion, das bedeutet, daß man das Programm nur mit bestimmten vorgegebenen Parametern aufrufen kann. Für den Gelegenheitsanwender ist dies ein großer Nachteil, da er diese Programmparameter und deren Wirkung mühsam erlernen muß. Für den professionellen Anwender ergibt sich ein großer Geschwindigkeitsvorteil, da das Programm durch die fehlenden Menüs sehr schnell ist. Auch bei diesen Shareware-Raytracern wird oftmals der Quellcode mitgeliefert.

Animationsprogrammierung

Falls man nun der Meinung ist, daß das Herstellen von Animationen die größte Schwierigkeit sei, so entspricht dies nicht den praktischen Gegebenheiten. Viele Programme stellen ihre Funktionen durch sogenannte Loops zur Verfügung. Dies bedeutet, daß ein bestimmter Befehl in einer vorgegebenen Anzahl wiederholt wird.

Will man nun eine Animation mit diesem Befehl herstellen, so muß man lediglich bei jedem der Durchgänge das entstandene Bild abspeichern. Man kann damit zwar die Animation nicht in Echtzeit am Schirm bewundern, hat aber die Möglichkeit, die Bilder mit Hilfe z.B. eines Videorecorders einzelbildweise aneinander zu schneiden. Anschließend kann man die erstellte Animation betrachten.

In der Praxis bedeutet dies, daß man, anstatt den Befehl zu geben: "Helle jeden Pixel um den Wert fünf auf", auch sagen kann: "Helle jeden Pixel um den Wert eins auf, speichere das Bild und beginne von vorne". Wiederum gilt hierbei allerdings die Einschränkung, daß bei Vektormodellen das Prinzip zwar dasselbe ist, die Umsetzung jedoch um einiges schwieriger ausfällt.

Makrosprachen

Seit Windows sich als Standardoberfläche für PC-Anwendungen durchgesetzt hat, ist auch die Programmierung hoffähig geworden. Praktisch jeder Textverarbeitung oder Tabellenkalkulation liegt eine sogenannte Makroprogrammiersprache bei. Mit Hilfe der hiermit erstellten Makros können oft benutzte Befehle automatisch wiederholt oder ganze Befehlsfolgen ausgeführt werden.

Das Erlernen einer Makroprogrammiersprache ist der erste Schritt zu eigenen Programmen. Mit der Einführung von Programmiersprachen wie Visual Basic soll die Programmierung jedermann zugänglich gemacht werden. Bei dieser Programmiersprache handelt es sich um eine Version, bei der mittels Mausklick vorgefertigte Elemente für Programme, wie etwa Bestätigungsboxen, Icons oder Verzeichnisbäume, in das eigene Programm eingebaut werden können. Durch diese enorme Erleichterung kann man sich bei der Programmierung auf die Eingabe weniger Formeln beschränken. Die "optische" Programmierart von Visual Basic soll in naher Zukunft auf die anderen verfügbaren Programmiersprachen übertragen werden. Zusätzlich werden alle zukünftigen Versionen der bekannten Textverarbeitungen, Tabellenkalkulationen und Datenbanken mit dieser visuellen Programmiersprache versehen. Hilfefunktionen, die während der Arbeit aufgerufen werden können, erleichtern den Umgang zusätzlich und steigern die weite Verbreitung dieser neuen Programmierart.

Wenn man sich mit den Makrofunktionen der Datenbanken auseinandersetzt, können leistungsstarke Suchalgorithmen erstellt werden, mit denen man viel Arbeitszeit einsparen kann (Abb. 17).

Wenn aus Zahlen Bilder werden

Abb. 17: Für die Herstellung eines Lexikons wurde mit Hilfe einer Makrosprache diese Datenmaske aufgebaut. Die Felder sind mit einer Datenbank gekoppelt. Extern wurden Abfragen programmiert, um auf jeden beliebigen Datensatz zugreifen zu können. Bei der verwendeten Datenbank handelt es sich um eine Windows-Version. Das hier gezeigte Bild wurde von einem sogenannten "Screenshot" gedruckt.

Auch in Zukunft wird allerdings die Programmierung hochwertiger Grafikkarten und reiner MS-DOS-Anwendungen kompliziert bleiben, da diese wegen der Funktionalität auf die Programmiersprache "C" beschränkt bleibt. Zudem haben die Hersteller der komplexen Grafikkarten bisher die Möglichkeit versäumt, entsprechende Tools zur einfacheren Programmierung zur Verfügung zu stellen.

Unter der grafischen Oberfläche Windows verbirgt sich noch ein weiteres Problem, das zum Beispiel bei Macintosh-Computern längst der Vergangenheit angehört. So wird unter dem Begriff "WYSIWYG" propagiert: "What you see is what you get". Das Problem besteht aber nach wie vor darin, daß die Dinge, die man am Bildschirm sieht, durchaus nicht immer dem entsprechen, was man auf dem Ausdruck oder der Belichtung sieht.

Diese Problematik beeinträchtigt auch die Programmierung von eigenen grafischen Anwendungen ungemein. Trotzdem ist es, wegen der sehr großen Verbreitung von Windows nicht falsch, die Programme weiter zu nutzen und zu hoffen, daß in den neuen Updates die bereits schmerzlich festgestellten Fehler behoben wurden...

Zusammenfassung

Schon seit vielen Jahren wird versucht, mathematische Formeln in ansprechende Grafiken umzusetzen. Nachdem sich die grafische Oberfläche Windows nun als Standard etabliert hat, wird auch das "Gelegenheitsprogrammieren" immer beliebter.

Mit Hilfe von Makrosprachen kann man sich mit der Programmierung von aufwendigen Anwendungen vertraut machen. Allerdings bleiben die reinen MS-DOS Anwendungen leistungsfähiger. Das Erlernen der Programmiersprachen Pascal und C ist zwar mit einigen Problemen verbunden aber wenn man diese Hochsprachen beherrscht, lassen sich vor allem Pixelbilder fast nach Belieben verändern.

Mit dieser Möglichkeit kann bestehende, professionelle Bildbearbeitungssoftware ergänzt werden. Dreidimensionale Modelle lassen sich ebenfalls selbst programmieren. Allerdings ist gerade diese Aufgabenstellung außerordentlich anspruchsvoll. Deshalb sollte man diesen Weg nur dann einschlagen, wenn die käuflich zu erwerbenden Programme die benötigten Funktionen nicht aufweisen.

Summary

Computer Graphics, Part VII:

For many years now there have been various approaches to converting mathematical equations into attractive graphical presentations. Now that the graphical user interface Windows has become established as a standard, more and more people are trying their hands at occasional programming tasks.

With the aid of makro languages one can familiarize oneself with programming even extensive applications. However, the performance of straight MS-DOS applications is still better. The highlevel procedural programming languages Pascal and C require some effort to learn, but once they are mastered, images especially pixel images, can be modified practically at will.

In this way it becomes possible to supplement existing image processing software. It is also possible to program three-dimensional models. However, this is also a very demanding and exacting task. This route should be taken only if none of the commercially available packages offers the required functions.

Zurück