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 ...
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 -