From c92cf1a6417948e2e614c2bbfe5c8758ed93539b Mon Sep 17 00:00:00 2001 From: manuel Date: Sun, 3 May 2009 19:14:28 +0200 Subject: finalizing protokoll --- ue2/protokoll.pdf | Bin 0 -> 470271 bytes ue2/protokoll/protokoll.tex | 60 ++++++++++++++++++++++---------------------- 2 files changed, 30 insertions(+), 30 deletions(-) create mode 100644 ue2/protokoll.pdf diff --git a/ue2/protokoll.pdf b/ue2/protokoll.pdf new file mode 100644 index 0000000..6a01a69 Binary files /dev/null and b/ue2/protokoll.pdf differ diff --git a/ue2/protokoll/protokoll.tex b/ue2/protokoll/protokoll.tex index f97fb2b..835e886 100644 --- a/ue2/protokoll/protokoll.tex +++ b/ue2/protokoll/protokoll.tex @@ -40,31 +40,31 @@ Manuel Mausz, \matrnr 0728348\\ Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe. \parskip 30pt -Refaktorisirung: +Refaktorisierung: \parskip 12pt Notwendigerweise und wie verlangt wurde die Klasse \mbox{CBitmap} zu einer abstrakten Interfaceklasse umgewandelt. Diese stellt nun die Oberklasse der zu unterstützenden Dateiformate dar und enthält verschieden virtuelle Methoden, die -von ihren Unterklassen zu implementieren sind. Dazu gehören, die schon aus Beispiel 1, bekannten Methoden \mbox{read()} und \mbox{write()}, -welche das Einlesen und Schreiben der Bilddaten realisieren. Hinzugekommen sind nun verschiedene ``getter'' Methoden, -wie zB.: \mbox{getHeight()} oder \mbox{getWidth()}, die vom direkten Zugriff auf die Bild-Informationen im jeweiligen Header-Speicher, der als -``struct'' deklariert wurde, abstrahieren.\\ -Die Methoden, zur Realisierung der einzelnen in den Aufgabenstellungen verlangten Befehle, wurden als ``protected'', in der zugehörigen cbitmap.cpp Datei, -generisch implementiert. Mit dieser Vorgehensweise war es möglich, die zu unterstützenden Dateiformate, auf ihre Eigenheiten -beschränkt, zu realisieren und Code wieder zu verwenden. -Unterklassen sind CWindowsBitmap aus Aufgabenstellung 1 und das neu hinzugekommene Format Pixmap. \\ +von ihren Unterklassen zu implementieren sind. Dazu gehören, die schon aus Beispiel 1 bekannten Methoden \mbox{read()} und \mbox{write()}, +welche das Einlesen und Schreiben der Bilddaten realisieren. Hinzugekommen sind nun verschiedene ``getter''-Methoden, +wie z.B. \mbox{getHeight()} oder \mbox{getWidth()}, die vom direkten Zugriff auf allgemeine Bildinformationen abstrahieren.\\ +Die gemäß Aufgabenstellungen verlangten Befehle zur Bildbearbeiten, wurden in abstrakten Interfaceklasse CBitmap als ``protected'' +generisch für alle Bildformate implementiert. Mit dieser Vorgehensweise war es möglich, die zu unterstützenden Dateiformate auf ihre Eigenheiten +zu beschränken, diese zu realisieren und allgemeinen Code wieder zu verwenden. +Unterklassen sind CWindowsBitmap aus Aufgabenstellung 1 und für das neu hinzugekommene Format Pixmap die Klasse CPixmap. \\ \parskip 12pt -Die abstrakte Interfaceklasse \mbox{CPixelFormat} wurde aus Beispiel 1 übernommen und enthält genauso, neben \mbox{getPixel()} und \mbox{setPixel()}, zusätzliche -virtuelle Methoden, die von den Unterklassen zu implementieren sind und Informationen zu den, von ihnen zu verarbeitenden Pixelcodierung, bereitstellen. -Weiters wurde eine Datenstruktur als Type, namens \mbox{RGBPIXEL}, eingeführt, welche zur Übergabe der Farbwerte, der einzelnen Pixel, dient. -Unterklassen sind \mbox{CPixelformat\_brg24} aus Aufgabenstellung 1, sowie die neuen Formate \mbox{CPixelformat\_brg555} und \mbox{CPixelformat\_Indexed8}. \\ +Die abstrakte Interfaceklasse \mbox{CPixelFormat} wurde aus Beispiel 1 übernommen und enthält nun neben \mbox{getPixel()} und \mbox{setPixel()} zusätzliche +virtuelle Methoden, die von den Unterklassen zu implementieren sind und Informationen zu den von ihnen zu verarbeitenden Pixelcodierung bereitstellen. +Weiters wurde die Datenstruktur \mbox{RGBPIXEL} eingeführt, welche zur Übergabe der Farbwerte der einzelnen Pixel dient. +Unterklassen sind \mbox{CPixelformat\_BRG24} aus Beispiel 1 sowie die neuen Formate \mbox{CPixelformat\_BRG55} und \mbox{CPixelformat\_Indexed8}. \\ \parskip 30pt Asserts: \parskip 12pt -Beim einlesen und bearbeiten von Bilddaten wurden Zusicherungen deklariert, welche die Größe und Existenz der Bilddaten validieren. +Beim Einlesen und Bearbeiten von Bilddaten wurden Zusicherungen deklariert, welche die Größe und Existenz der Bilddaten sicherstellen. + \newpage %================================================================== \begin{figure}[htb] @@ -80,29 +80,29 @@ Beim einlesen und bearbeiten von Bilddaten wurden Zusicherungen deklariert, welc \subsection{Verwaltung der Ressourcen} Die Vorgehensweise bei der Ressourcenverwaltung wurde größtenteils von Aufgabe 1 übernommen. -Neu dazugekommen sind Funktionalitäten zur Verwaltung von Farbtabellen. -Dabei wurde ebenfalls ein generisches Konzept entwickelt, welches Unterschiede in der Farb-Indizierung ausgleichen soll. -Erwähnt sei, dass in der Implementierung der Klasse CPixmap vorerst nur Farbwerte in hexadezimaler Form, sowie der Pixmap eigene Darstellungs-Modus ``c'' unterstützt werden. -Beim Einlesen der Pixeldaten, welche die Indizes der zugeordneten Farbwert darstellen, werden diese mit internen, allgemeineren Indizes, -der Form 0,1,2 .. n ausgetauscht. Die Farbtabelle wird in einer ``map'', welche im abstrakten Interface CBitmap deklariert ist und die internen +Neu hinzugekommen sind Funktionalitäten zur Verwaltung von Farbtabellen. +Dabei wurde ebenfalls ein generisches Konzept gewählt, welches Unterschiede in der Farbindizierung ausgleichen soll. +Erwähnt sei, dass in der Implementierung der Klasse CPixmap vorerst nur Farbwerte in hexadezimaler Form sowie der Pixmap eigene Darstellungsmodus ``c'' unterstützt werden. +Beim Einlesen der Pixeldaten, welche die Indizes der zugeordneten Farbwert darstellen, werden diese mit internen, allgemeineren Indizes +der Form 0,1,2 .. n ausgetauscht. Die Farbtabelle wird in einer ``\mbox{std::map}'', welche im abstrakten Interface CBitmap deklariert ist und die internen Indizes als Schlüssel erwartet, abgelegt. -Farbwerte werden dabei in der, in Abschnitt 2.1 erwähnten Datenstrucktur \mbox{RGBPIXEL} organisiert, für die dynamisch Speicher alloziert wird. -Die Freigabe dieser Ressourcen erfolgt wieder im Destruktor von \mbox{CBitmap}. \\ +Farbwerte werden dabei in der in Abschnitt 2.1 erwähnten Datenstruktur \mbox{RGBPIXEL}, für die dynamisch Speicher alloziert werden muss, organisiert. +Die Freigabe dieser Ressourcen erfolgt wieder im Destruktor von \mbox{CBitmap}.\\ \subsection{Fehlerbehandlung} -Die Fehlerbehandlung erfolgt nach wie vor über \mbox{CPixelFormat::PixelFormatError}, \mbox{CFile::FileError}, \mbox{CScriptParser::ParserError} -und dem ``try-catch'' Block im Hauptprogramm. Die Header und Pixeldaten werden beim einlesn, gemäß der Spezifikation, auf Korrektheit überprüft. -Im Fehlerfall wird eine Exeception geworfen, eine Fehlerbeschreibung über stderr ausgegeben und das Programm beendet. +Die Fehlerbehandlung erfolgt nach wie vor über die Übersetzung der Exceptions \mbox{CPixelFormat::PixelFormatError}, \mbox{CFile::FileError}, \mbox{CScriptParser::ParserError} +und dem ``try-catch'' Block im Hauptprogramm. Die Header und Pixeldaten werden beim Einlesen rudimentär, aber gemäß der Spezifikation, auf Korrektheit überprüft. +Im Fehlerfall wird eine Exception geworfen, eine Fehlerbeschreibung über stderr ausgegeben und das Programm beendet. \subsection{Implementierung} -Im Folgenden werden einige Implementierungauszüge, der geforderten Funktionen, gezeigt. +Im Folgenden werden einige Implementierungauszüge der geforderten Funktionen gezeigt. Siehe auch Punkt~\ref{Design} und Abbildung~\ref{fig:classdiagram1} sowie Punkt~\ref{Listings}. -Im Falle eines Bildes mit Farbtabelle ist es nur notwendig, die Farbwerte in der Tabelle zu ändern. +Im Falle eines Bildes mit Farbtabelle ist es nur notwendig die Farbwerte in der Tabelle zu ändern. Die Farbtabelle ist in folgender Form in der abstrakten Interfaceklasse \mbox{CBitmap} deklariert. %================================================================== @@ -113,7 +113,7 @@ Die Farbtabelle ist in folgender Form in der abstrakten Interfaceklasse \mbox{CB \newpage -Beim schreiben der \mbox{CPixmap} Bilddaten werden die Pixel und Indizes der Farbtabelle wieder in Characters zurückkonveriert. +Beim Schreiben der Bilddaten für das Format Pixmap werden die Pixel und Indizes der Farbtabelle wieder in korrekte Identifier zurückkonvertiert. %================================================================== \begin{lstlisting}{} #define PIXMAP_COLORCHARS ".#abcdefghijklmnopqrstuvwxyzABCD" \ @@ -130,7 +130,7 @@ Beispiel für die Invertierung eines Farbwertes in einer Rastergrafik. %==== brightness(params): -Beispiel für die veränderung der Helligkeit eines Bildpunktes. +Beispiel für die Veränderung der Helligkeit eines Bildpunktes. %================================================================== \begin{lstlisting}{} pixel.red = min(max.red, static_cast(pixel.red * factor)); @@ -141,8 +141,8 @@ Beispiel für die veränderung der Helligkeit eines Bildpunktes. \subsection{Probleme und Fallstricke} -Die Schwierigkeit bestand darin, einen Weg zu finden Bildformate mit Farbtabellen gleichermaßen zu behandeln, wie jene, die die Farbwerte direkt im Bildspeicher halten. -Durch die virtuelle Methode \mbox{const bool hasColorTable()} in der abstrakten Interfaceklasse \mbox{CBitmap} ist es möglich die Abarbeitung von Operationen auf den +Die Schwierigkeit bestand darin, einen Weg zu finden, Bildformate mit Farbtabellen gleichermaßen zu behandeln, wie jene, die die Farbwerte direkt im Bildspeicher halten. +Durch die virtuelle Methode \mbox{const bool hasColorTable()} in der abstrakten Interfaceklasse \mbox{CBitmap} ist es möglich die Abarbeitung von Bildoperationen auf den Bilddaten entsprechend zu delegieren. \subsection{Arbeitsaufwand} -- cgit v1.2.3