From bdd1405e71940630d29004a597fe8ae6afd6af47 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?G=C3=BCnther=20Neuwirth?= <e0626638@student.tuwien.ac.at>
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/protokoll.tex')

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<uint32_t, CPixelFormat::RGBPIXEL *> 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<uint32_t>(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

