From bdd1405e71940630d29004a597fe8ae6afd6af47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Neuwirth?= Date: Sun, 3 May 2009 17:01:43 +0200 Subject: Protokoll --- ue2/protokoll/protokoll.tex | 84 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 74 insertions(+), 10 deletions(-) (limited to 'ue2/protokoll') diff --git a/ue2/protokoll/protokoll.tex b/ue2/protokoll/protokoll.tex index e3dddd7..1eefbce 100644 --- a/ue2/protokoll/protokoll.tex +++ b/ue2/protokoll/protokoll.tex @@ -18,7 +18,7 @@ Manuel Mausz, \matrnr 0728348\\ % create titlepage \maketitle - +\parindent 0pt \tableofcontents \newpage @@ -32,16 +32,36 @@ Manuel Mausz, \matrnr 0728348\\ %------------------------------------------------------------------ %------------------------------------------------------------------ - +\newpage \section{Beispiel 2} \subsection{Design}\label{Design} Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe. +\parskip 30pt +Refaktorisirung: + +\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. \\ + +\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}. \\ -TODO +\newpage %================================================================== \begin{figure}[htb] \begin{center} @@ -52,28 +72,72 @@ TODO \end{figure} %================================================================== - +\newpage \subsection{Verwaltung der Ressourcen} -TODO +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 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 +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}. \\ + \subsection{Fehlerbehandlung} -TODO +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. \subsection{Implementierung} -TODO +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. + +Die Farbtabelle ist in folgender Form in der abstrakten Interfaceklasse \mbox{CBitmap} deklariert. +%================================================================== +\begin{lstlisting}{} + std::map m_colortable; +\end{lstlisting} +%================================================================== +Beim schreiben der Bilddaten werden die Pixedaten und Indizes der Farbtabelle wieder in Characters zurückkonveriert. +%================================================================== +\begin{lstlisting}{} + #define PIXMAP_COLORCHARS ".#abcdefghijklmnopqrstuvwxyzABCD" \ + "EFGHIJKLMNOPQRSTUVWXYZ0123456789" +\end{lstlisting} +%==== + +inver(): +Beispiel für die Invertierung eines Farbwertes in einer Rastergrafik. +%================================================================== +\begin{lstlisting}{} + pixel.red = max.red - pixel.red; +\end{lstlisting} +%==== + +brightness(params): +Beispiel für die veränderung der Helligkeit eines Bildpunktes. +%================================================================== +\begin{lstlisting}{} + pixel.red = min(max.red, static_cast(pixel.red * factor)); +\end{lstlisting} +%==== \section{Projektverlauf} \subsection{Probleme und Fallstricke} -TODO +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 +Bilddaten entsprechend zu delegieren. \subsection{Arbeitsaufwand} -- cgit v1.2.3