20.08.2013 Aufrufe

Morphologische Operatoren in C++ am Beispiel von Erosion und ...

Morphologische Operatoren in C++ am Beispiel von Erosion und ...

Morphologische Operatoren in C++ am Beispiel von Erosion und ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Morphologische</strong> <strong>Operatoren</strong> <strong>in</strong> <strong>C++</strong> <strong>am</strong> <strong>Beispiel</strong> <strong>von</strong> <strong>Erosion</strong> <strong>und</strong><br />

Dilatation<br />

(<strong>von</strong> Erhardt, Markus <strong>und</strong> Florian, Achatz)<br />

Inhaltsverzeichnis<br />

Inhaltsverzeichnis....................................................................................................................... 1<br />

1. Die <strong>Morphologische</strong>n <strong>Operatoren</strong> (Menü: MyMenu)........................................................ 2<br />

1.1. Der obere Teil.............................................................................................................2<br />

1.1.1. Format (Debug Info) .......................................................................................... 2<br />

1.1.2. Invert .................................................................................................................. 2<br />

1.1.3. B<strong>in</strong>arize .............................................................................................................. 3<br />

1.1.4. Count Color’s ..................................................................................................... 4<br />

1.1.5. <strong>Erosion</strong> (B<strong>in</strong>ärbilder) (Aufhellung).................................................................... 4<br />

1.1.6. Dilatation (B<strong>in</strong>ärbilder) (Verdunklung) ............................................................. 5<br />

1.1.7. <strong>Erosion</strong> (Aufhellung) experimentell................................................................... 5<br />

1.1.8. Dilatation (Verdunklung) experimentell ............................................................ 6<br />

1.1.9. Black (Debug Info)............................................................................................. 7<br />

1.1.10. Test Dialog (Debug Info) ................................................................................... 7<br />

1.2. Der untere Teil ........................................................................................................... 7<br />

1.2.1. Bild <strong>in</strong> Grauwerten Darstellen............................................................................ 7<br />

1.2.2. Extraktion <strong>von</strong> Rändern (<strong>Erosion</strong>) ..................................................................... 8<br />

1.2.3. Dilatation ohne Zus<strong>am</strong>menwachsen................................................................... 9<br />

1.2.4. Threshold setzen................................................................................................. 9<br />

1.3. Die Aufgabenverteilung ........................................................................................... 10<br />

2. Anhang ............................................................................................................................. 11<br />

2.1. Die Projekt Sourcen ................................................................................................. 11<br />

2.1.1. wichtige Dateien <strong>und</strong> Verzeichnisse ................................................................ 11<br />

2.1.2. „Installation“ der Sourcen ................................................................................ 11<br />

2.1.3. verändern der Sourcen...................................................................................... 12<br />

2.1.4. Besonderheiten der Sourcen............................................................................. 12<br />

2.1.4.1. Position der Progr<strong>am</strong>mdateien ................................................................. 12<br />

2.1.4.2. Die verschieden N<strong>am</strong>en <strong>von</strong> „IMDisplay“............................................... 12<br />

2.1.4.3. Besonderheiten beim H<strong>in</strong>zufügen <strong>von</strong> Source – Dateien......................... 12<br />

2.2. Weitere Besonderheiten ........................................................................................... 13<br />

2.2.1. Das Menü File Save............................................................................... 13<br />

2.2.2. Das Menü File Save as .......................................................................... 13<br />

- 1 -


1. Die <strong>Morphologische</strong>n <strong>Operatoren</strong> (Menü: MyMenu)<br />

Der Menüpunkt MyMenu soll aussagen, dass dies der Teil dieses Progr<strong>am</strong>ms ist, welcher im<br />

Rahmen dieser Semesterarbeit verändert (hier h<strong>in</strong>zugefügt) wurde. Das Menü ist Optisch <strong>in</strong><br />

zwei „Teile“ unterteilt, diese Teile stellen getrennte Implementierungen da <strong>und</strong> unterscheiden<br />

sich sowohl im Autor als auch <strong>in</strong> der Implementierung <strong>und</strong> Algorithmischen Umsetzung.<br />

Überschriften mit dem Zusatz (Debug Info) s<strong>in</strong>d nicht wirklich als Information für den<br />

Endbenutzer gedacht, sondern dienen der Fehlerf<strong>in</strong>dung zu Debug zwecken <strong>und</strong> diese Punkte<br />

verdeutlichen (im Source-Code) wie auf verschiedene Elemente des Fr<strong>am</strong>eworks zugegriffen<br />

werden kann.<br />

1.1. Der obere Teil<br />

1.1.1. Format (Debug Info)<br />

Es wird angegeben, welche Anzahl an horizontalen <strong>und</strong> vertikalen Pixel das angezeigte Bild<br />

besitzt. Zusätzlich wird angegeben, mit welcher Bittiefe pro R -, G -, B -, (Red, Green, Blue)<br />

<strong>und</strong> optional Opacity - Kanal das Bild dargestellt wird.<br />

1.1.2. Invert<br />

Diese Funktion ist dazu da beliebige Bilder zu Invertieren. Hierzu wird e<strong>in</strong>fach das Inverse<br />

der Kanäle R, G, B genommen. Z. B.: Max ist die größte Zahl, welche <strong>in</strong> e<strong>in</strong>em Kanal<br />

dargestellt werden kann, so ist das Inverse der Kanäle:<br />

Rneu = Max – R,<br />

Gneu = Max – G,<br />

Bneu = Max – B.<br />

- 2 -


1.1.3. B<strong>in</strong>arize<br />

Diese Funktion ist dazu da e<strong>in</strong> beliebiges Farb- oder Schwarz - Weiß – Bild <strong>in</strong> e<strong>in</strong> b<strong>in</strong>äres<br />

Bild umzurechnen. Dazu werden drei Schwellen verwendet. Wenn e<strong>in</strong> Bildpunkt größer als<br />

diese Schwelle ist, so wird se<strong>in</strong> Wert auf R = G = B = Max (Max == White = 0x00) gesetzt<br />

<strong>und</strong> andersherum.<br />

<br />

- 3 -


1.1.4. Count Color’s<br />

Diese Funktion zählt alle verschieden Farben, die <strong>in</strong> e<strong>in</strong>em Bild vorhanden s<strong>in</strong>d, je nach<br />

Implementierung werden hier alle 4 Kanäle (R, G, B, Opacity) verwendet.<br />

Diese Funktion kann aufgr<strong>und</strong> der möglicherweise vielen Farben pro Pixel e<strong>in</strong>e sehr lange<br />

Laufzeit haben. Im Extremfall beträgt die Laufzeit dieser Funktion N (Anzahl der Pixel des<br />

Bildes) * log2 (Anzahl der verschiedenen Farben des Bildes) die Laufzeit kann gleich N *<br />

log2(N) se<strong>in</strong>.<br />

1.1.5. <strong>Erosion</strong> (B<strong>in</strong>ärbilder) (Aufhellung)<br />

Diese Funktion erodiert e<strong>in</strong> b<strong>in</strong>äres Bild. Dies bedeutet, dieses Verfahren ist nur für Bilder,<br />

welche genau zwei verschiedene Farben besitzen def<strong>in</strong>iert. Dabei ist es allerd<strong>in</strong>gs egal,<br />

welche zwei Farben dies s<strong>in</strong>d.<br />

Die <strong>Erosion</strong> e<strong>in</strong>es Bildes bedeutet, dass jedes untersuchte Pixel durch das hellste Pixel se<strong>in</strong>er<br />

Umgebung ersetzt wird. Anschaulich entspricht dies e<strong>in</strong>er Ausdehnung aller hellen Objekte<br />

e<strong>in</strong>es Bildes.<br />

In der „Umgebungsselektionsmaske“ kann man e<strong>in</strong>stellen, welche Pixel <strong>in</strong> der Umgebung<br />

e<strong>in</strong>es Pixels zur Auswertung herangezogen werden sollen. Durch diese Maske ist es möglich<br />

gezielt e<strong>in</strong>zelne Operationen selektiv Durchzuführen.<br />

- 4 -


1.1.6. Dilatation (B<strong>in</strong>ärbilder) (Verdunklung)<br />

<br />

Diese Funktion dilatiert e<strong>in</strong> b<strong>in</strong>äres Bild. Dies bedeutet, dieses Verfahren ist nur für Bilder,<br />

welche genau zwei verschiedene Farben besitzen def<strong>in</strong>iert. Dabei ist es allerd<strong>in</strong>gs egal,<br />

welche zwei Farben dies s<strong>in</strong>d.<br />

Die Dilatation e<strong>in</strong>es Bildes bedeutet, dass jedes untersuchte Pixel durch das dunkelste Pixel<br />

se<strong>in</strong>er Umgebung ersetzt wird. Anschaulich entspricht dies e<strong>in</strong>er Ausdehnung aller dunklen<br />

Objekte e<strong>in</strong>es Bildes.<br />

In der „Umgebungsselektionsmaske“ kann man e<strong>in</strong>stellen, welche Pixel <strong>in</strong> der Umgebung<br />

e<strong>in</strong>es Pixels zur Auswertung herangezogen werden sollen. Durch diese Maske ist es möglich<br />

gezielt e<strong>in</strong>zelne Operationen selektiv Durchzuführen.<br />

<br />

1.1.7. <strong>Erosion</strong> (Aufhellung) experimentell<br />

Diese Funktion entspricht der Funktion 1.1.5 (<strong>Erosion</strong> (B<strong>in</strong>ärbilder) (Aufhellung)), allerd<strong>in</strong>gs<br />

ist die Beschränkung auf genau zwei verschieden Farben aufgehoben. Diese Funktion kann<br />

somit auf Bildern mit beliebig vielen Farben arbeiten. Diese Erweiterung ist aber nur<br />

unzureichend getestet <strong>und</strong> Trägt deswegen den Zusatz „experimentell“.<br />

- 5 -


1.1.8. Dilatation (Verdunklung) experimentell<br />

<br />

Diese Funktion entspricht der Funktion 1.1.6 (Dilatation (B<strong>in</strong>ärbilder) (Verdunklung)),<br />

allerd<strong>in</strong>gs ist die Beschränkung auf genau zwei verschieden Farben aufgehoben. Diese<br />

Funktion kann somit auf Bildern mit beliebig vielen Farben arbeiten. Diese Erweiterung ist<br />

aber nur unzureichend getestet <strong>und</strong> Trägt deswegen den Zusatz „experimentell“.<br />

<br />

- 6 -


1.1.9. Black (Debug Info)<br />

Black ist hier Progr<strong>am</strong>m, diese Funktion ersetzt jeden Bildpunkt durch den „Farbwert“<br />

Schwarz (Black).<br />

Diese Funktion ist als Debug bzw. Muster – Funktion zu <strong>in</strong>terpretieren, die anschaulich<br />

Demonstriert, wie auf e<strong>in</strong>fachste Art die Pixelwerte e<strong>in</strong>es Bildes verändert werden können.<br />

1.1.10. Test Dialog (Debug Info)<br />

Hier wird der Umgebungsauswahl Dialog der <strong>Erosion</strong>s- / Dilatationsfunktionen zu Debug<br />

zwecken aufgerufen, um Oberflächentests ohne e<strong>in</strong>e Veränderung <strong>am</strong> Bild vornehmen zu<br />

können.<br />

1.2. Der untere Teil<br />

1.2.1. Bild <strong>in</strong> Grauwerten Darstellen<br />

Diese Funktion berechnet aus normalen RGB Bildern das entsprechende Graustufenbild.<br />

Dabei wird für jedes Pixel mit der Formel<br />

Y = 0.3*R + 0.59*G + 0.11*B<br />

<br />

die Helligkeit bestimmt <strong>und</strong> R=G=B=Y gesetzt.<br />

Somit gibt es für e<strong>in</strong> Bild nur e<strong>in</strong>en Farbkanal (Lum<strong>in</strong>az) gegenüber <strong>von</strong> Farbbildern, die drei<br />

Kanäle besitzen. Dies erleichtert das implementieren <strong>von</strong> Bildbearbeitungsfunktionen da nur<br />

die Helligkeit betrachtet werden muss.<br />

- 7 -


1.2.2. Extraktion <strong>von</strong> Rändern (<strong>Erosion</strong>)<br />

Mit der „Extraktion <strong>von</strong> Rändern“ Funktion lässt sich für e<strong>in</strong> beliebiges Graustufenbild der<br />

Objektrand bestimmen <strong>und</strong> farblich Markieren.<br />

D<strong>am</strong>it diese Funktion zum gewünschten Erfolg führt, muss zuerst der Schwellwert<br />

(Helligkeit) des Objektes bzw. des H<strong>in</strong>tergr<strong>und</strong>s e<strong>in</strong>gestellt werden.<br />

Die geschieht über den Menüpunk „Threshold setzen“.<br />

Gr<strong>und</strong>lage für dieses Verfahren ist e<strong>in</strong>e 3x3 Matrix die jedes Pixel prüft, ob <strong>in</strong> ihrem Umfeld<br />

e<strong>in</strong> H<strong>in</strong>tergr<strong>und</strong>pixel vorhanden ist. Ist dies der Fall, so ist anzunehmen, dass es sich um e<strong>in</strong><br />

Randpixel handelt.<br />

<br />

- 8 -


1.2.3. Dilatation ohne Zus<strong>am</strong>menwachsen<br />

Diese Progr<strong>am</strong>mfunktion verh<strong>in</strong>dert das „Zus<strong>am</strong>menwachsen“ <strong>von</strong> Objekten bei der<br />

Dilatation. Wie bei der Extraktionsfunktion muss auch hier der Schwellwert des H<strong>in</strong>tergr<strong>und</strong>s<br />

<strong>und</strong> des Objekts def<strong>in</strong>iert se<strong>in</strong>.<br />

Technisch gesehen ist dies ist e<strong>in</strong> Filter mit e<strong>in</strong>er 5x5 Matrix. Die im Vergleich große Matrix<br />

ist erforderlich, um frühzeitig e<strong>in</strong>e anderes Objekt zu erkennen <strong>und</strong> daraufh<strong>in</strong> nicht mehr<br />

weiter zu dilaterieren. D<strong>am</strong>it diese Funktion nicht trotzdem zum „Zus<strong>am</strong>menwachsen“ zweier<br />

oder mehrerer Objekte führt, ist es erforderlich, zu prüfen ob Objekte bereits über Stege<br />

mite<strong>in</strong>ander verb<strong>und</strong>en s<strong>in</strong>d. Ist dies der Fall, so müssen mit e<strong>in</strong>em geeigneten <strong>Erosion</strong>sfilter<br />

die Objekte <strong>von</strong>e<strong>in</strong>ander getrennt werden.<br />

Die Pixel e<strong>in</strong>zelner Objekte können sich u. U. bis auf e<strong>in</strong>en Pixel annähern.<br />

1.2.4. Threshold setzen<br />

In diesem Dialog ist es möglich e<strong>in</strong>en Grenzwert zwischen Objekt <strong>und</strong> Bildh<strong>in</strong>tergr<strong>und</strong> zu<br />

def<strong>in</strong>ieren. Als erstes ist es wichtig zu entscheiden, ob das Objekt dunkel <strong>und</strong> der H<strong>in</strong>tergr<strong>und</strong><br />

hell ist oder umgekehrt. Die hier getroffenen E<strong>in</strong>stellungen s<strong>in</strong>d global gültig. D.h.<br />

„Dilateration ohne Zus<strong>am</strong>menwachsen“ <strong>und</strong> „Extraktion <strong>von</strong> Rändern“ verwenden die aktuell<br />

e<strong>in</strong>gestellten Werte.<br />

- 9 -


1.3. Die Aufgabenverteilung<br />

Die Aufgabenverteilung soll festhalten, wer im Rahmen dieses Projektes für welche Aufgaben<br />

zuständig war. Dies ist allerd<strong>in</strong>gs nicht mehr auf die Source – Code – Zeile genau festzulegen.<br />

Mit folgender Aufgabenteilung können sich die Beteiligen allerd<strong>in</strong>gs arrangieren:<br />

N<strong>am</strong>e Aufgabe /-n<br />

Erhardt, Markus Erstellung der oberen Hälfte der<br />

Funktionen im „Menü MyMenu“<br />

Erstellung der halben Dokumentation<br />

Erstellung der Dokumentationsanlagen<br />

Erstellung der Funktionalität „Speichern“<br />

Achatz, Florian Erstellung der unteren Hälfte der<br />

Funktionen im „Menü MyMenu“<br />

Erstellung der halben Dokumentation<br />

- 10 -


2. Anhang<br />

2.1. Die Projekt Sourcen<br />

Die Sourcen s<strong>in</strong>d aus dem Public – Projekt auf:<br />

http://www.imagemagick.org/<br />

Die Sourcen s<strong>in</strong>d <strong>in</strong> folgendem ZIP – File enthalten: (Im Orig<strong>in</strong>al:)<br />

ImageMagick-6.1.2-3.zip<br />

Im Rahmen dieser Praktikumsarbeit wurde die <strong>Beispiel</strong> Applikation „UTIL_IMDisplay“<br />

erweitert.<br />

2.1.1. wichtige Dateien <strong>und</strong> Verzeichnisse<br />

Verzeichnis Bedeutung für dieses Projekt<br />

\ Das Basisverzeichnis. Z. B.: C:\ImageMagick-6.1.2<br />

\www Die offl<strong>in</strong>e Version der Homepage (e<strong>in</strong>ige L<strong>in</strong>ks s<strong>in</strong>d defekt, bei<br />

Problemen mal mit \www\Magick++\<strong>in</strong>dex.html versuchen).<br />

\www\Magick++ Die offl<strong>in</strong>e Dokumentation der <strong>C++</strong> API<br />

\w<strong>in</strong>2k\IMDisplay Die Sourcen, der Applikation, welche hier verändert wurden.<br />

\VisualMagick\configure Das hier enthaltene Projekt auszuführen, um die Sourcen auf e<strong>in</strong>e<br />

neue Umgebung e<strong>in</strong>zustellen, bzw. Veränderungen vorzunehmen.<br />

E<strong>in</strong>fach den Workspace mit Visual Studio öffnen <strong>und</strong> auf<br />

Debug/Ausführen klicken <strong>und</strong> das Progr<strong>am</strong>m ausführen. Weiteres<br />

<strong>in</strong> der Datei „\Install-w<strong>in</strong>dows.txt“.<br />

\VisualMagick\All Der Workspace, <strong>in</strong> dem sich alle <strong>in</strong> diesem Source – Tree<br />

bef<strong>in</strong>dlichen Projekte bef<strong>in</strong>den. E<strong>in</strong>fach All.dsp im Visual Studio<br />

öffnen.<br />

Datei Bedeutung für dieses Projekt<br />

\Install-w<strong>in</strong>dows.txt HowTo, wie der Source – Code unter W<strong>in</strong>dows<br />

verwendet werden kann.<br />

Magick.pdf Dokumentation zu Magick. Inhalt ??? …<br />

\VisualMagick\All\All.dsp Die allgeme<strong>in</strong>e Projektdatei!! Diese wurde im<br />

Rahmen dieses Projektes mit Visual Studio 2003<br />

(für <strong>C++</strong>) bearbeitet.<br />

\VisualMagick\configure\configure.dsp Das Konfigurationsprojekt zum Anpassen des<br />

Source Codes.<br />

\www\<strong>in</strong>dex.html Startseite der offl<strong>in</strong>e Dokumentation<br />

\www\Magick++\<strong>in</strong>dex.html Startseite der offl<strong>in</strong>e Dokumentation der <strong>C++</strong><br />

API<br />

2.1.2. „Installation“ der Sourcen<br />

Vorgehensweise:<br />

1. Entpacken des Archivs: Z.B.: ImageMagick-6.1.2-3.zip<br />

2. Lesen der Datei: \Install-w<strong>in</strong>dows.txt<br />

3. Konfiguration des Sourcen durch ausführen des Konfigurationsprojektes:<br />

\VisualMagick\configure\configure.dsp<br />

- 11 -


4. Bearbeiten (falls gewünscht) des <strong>Beispiel</strong> Projektes UTIL_IMDisplay. Durch öffnen<br />

des Projektes: \VisualMagick\All\All.dsp.<br />

2.1.3. verändern der Sourcen<br />

Das bearbeiten der Sourcen für das <strong>Beispiel</strong> – Projekt (UTIL_-) IMDisplay ist unter 2.1.2<br />

beschrieben.<br />

Es ist zu empfehlen immer das allgeme<strong>in</strong>e Projektfile „All.dsp“ zu verwenden. Alternativ<br />

dazu kann natürlich versucht werden das Projekt direkt zu öffnen unter:<br />

„\w<strong>in</strong>2k\IMDisplay\IMDisplay.dsw“.<br />

2.1.4. Besonderheiten der Sourcen<br />

Im Folgenden s<strong>in</strong>d Besonderheiten, welche den E<strong>in</strong>steiger verwirren könnten als e<strong>in</strong>zelne<br />

H<strong>in</strong>weise aufgeführt.<br />

2.1.4.1. Position der Progr<strong>am</strong>mdateien<br />

Normalerweise s<strong>in</strong>d <strong>in</strong> e<strong>in</strong>em Visual Studio Projekt alle „Debug-“ <strong>und</strong> „Release-“ B<strong>in</strong>aries <strong>in</strong><br />

entsprechenden Verzeichnissen unter dem Hauptverzeichnis, das Hauptverzeichnis enthält<br />

z.B. die Projektdatei) zu f<strong>in</strong>den. In diesem Source - Code – Tree s<strong>in</strong>d die B<strong>in</strong>aries aber <strong>in</strong> den<br />

folgenden Verzeichnissen untergebracht:<br />

\VisualMagick\b<strong>in</strong> Alle DLL <strong>und</strong> EXE Dateien<br />

\VisualMagick\Debug Sonstige Objektdateien, meist<br />

Zwischendateien.<br />

2.1.4.2. Die verschieden N<strong>am</strong>en <strong>von</strong> „IMDisplay“<br />

„IMDisplay“ bezeichnet das im Rahmen der Semester – Arbeit veränderte Progr<strong>am</strong>m.<br />

IMDisplay Der Progr<strong>am</strong>m- / Projektn<strong>am</strong>e<br />

UTIL_IMDisplay N<strong>am</strong>e des Projektes <strong>in</strong> der Projektdatei:<br />

\VisualMagick\All\All.dsp<br />

\VisualMagick\b<strong>in</strong>\UTIL_DB_IMDisplay_.exe Das Progr<strong>am</strong>m IMDisplay <strong>in</strong> der Debug<br />

Konfiguration.<br />

\VisualMagick\b<strong>in</strong>\UTIL_RL_IMDisplay_.exe Das Progr<strong>am</strong>m IMDisplay <strong>in</strong> der Release<br />

Konfiguration.<br />

2.1.4.3. Besonderheiten beim H<strong>in</strong>zufügen <strong>von</strong> Source – Dateien<br />

Bearbeiten der Sourcen über die allgeme<strong>in</strong>e Projekt – Datei:<br />

\VisualMagick\All\All.dsp<br />

Beim Erstellen <strong>von</strong> zusätzlichen Source – Dateien z.B. Klassen- <strong>und</strong> Headerdateien oder<br />

Klassen zum Ansprechen <strong>von</strong> neuen Resourcen z.B. Dialogen kann es vorkommen, dass beim<br />

nächsten Kompilieren die Fehlermeldung „File … not fo<strong>und</strong>! …“ auftritt.<br />

Ursache hierfür ist, dass die neuen Dateien im Verzeichnis \VisualMagick\All\* angelegt<br />

werden <strong>und</strong> nicht im „aktuellen Projekt Verzeichnis“.<br />

- 12 -


Beseitigung dieses Fehlers ist durch manuelles entfernen der neu erstellten Dateien aus der<br />

Projektdatei, kopieren dieser Dateien <strong>in</strong> das aktuelle Projektverzeichnis z.B.:<br />

\w<strong>in</strong>2k\IMDisplay <strong>und</strong> anschließendes wiedere<strong>in</strong>fügen der Dateien <strong>in</strong> die Projektdatei zu<br />

erreichen.<br />

2.2. Weitere Besonderheiten<br />

2.2.1. Das Menü File Save<br />

Die Funktionalität des Menüpunktes „File Save“ war ursprünglich nicht Implementiert <strong>und</strong><br />

wurde h<strong>in</strong>zugefügt. Allerd<strong>in</strong>gs ist die Implementierung nicht e<strong>in</strong>wandfrei. Dies bedeutet, dass<br />

verschiedene Dateiformate beim Speichern Fehlermeldungen oder Exceptions auslösen, dies<br />

kann aber so lange Ignoriert werden, wie die Daten <strong>in</strong> e<strong>in</strong>em gültigen Format <strong>in</strong> der Datei<br />

stehen. Meistens ist es gelungen e<strong>in</strong> Bild zu speichern, manchmal allerd<strong>in</strong>gs war die Datei<br />

lehr (Größe = 0 Byte) oder die Datei war nicht mit jedem Progr<strong>am</strong>m lesbar.<br />

E<strong>in</strong>e Besonderheit, die weiterh<strong>in</strong> auffiel, war das manche *.tif – Dateien beim Laden die<br />

Fehlermeldung:<br />

… … … *.tif: unknown field with tag 37724 (0x935c) encountered.<br />

Verursachten. Wenn versucht wurde dieses Bild wieder zu Speichern, so gelang dies <strong>in</strong> der<br />

Release Übersetzung problemlos, <strong>in</strong> der Debug Übersetzung h<strong>in</strong>gegen wurde e<strong>in</strong>e Exception<br />

vom Debugger aufgefangen. Diese konnte e<strong>in</strong>fach mit „weiter“ umgangen werden.<br />

2.2.2. Das Menü File Save as<br />

Der Menüpunkt „File Save as“ beruht auf der selben Implementierung wie „File Save“,<br />

siehe 2.2.1, dies bedeutet, die oben erwähnten Besonderheiten f<strong>in</strong>den hier ebenfalls<br />

Anwendung.<br />

Dateien können auch <strong>in</strong> anderen Dateiformaten als dem angebotenen *.jpg gespeichert<br />

werden. Im Pr<strong>in</strong>zip, können dazu alle Dateiformate angegeben werden, die im „File Open“<br />

Dialog angezeigt werden. Um e<strong>in</strong>e anderes Dateiformat beim Speichern auszuwählen muss<br />

man e<strong>in</strong>fach die aktuelle Dateiendung durch die gewünschte ersetzen, aus z.B.:<br />

balls.tif<br />

könnte man:<br />

balls.bmp<br />

machen, wenn man dieses Bild im Bitmapformat speichern möchte.<br />

- 13 -

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!