summaryrefslogtreecommitdiffstats
path: root/ue2
diff options
context:
space:
mode:
authorGünther Neuwirth <e0626638@student.tuwien.ac.at>2009-05-03 17:01:43 +0200
committerGünther Neuwirth <e0626638@student.tuwien.ac.at>2009-05-03 17:01:43 +0200
commitbdd1405e71940630d29004a597fe8ae6afd6af47 (patch)
tree50d3e5e1ab5554f01a24254e6425657da3a0eac2 /ue2
parentc9945c50c3cfd49c00a458e3f0be7ef5be60439f (diff)
downloadooprog-bdd1405e71940630d29004a597fe8ae6afd6af47.tar.gz
ooprog-bdd1405e71940630d29004a597fe8ae6afd6af47.tar.bz2
ooprog-bdd1405e71940630d29004a597fe8ae6afd6af47.zip
Protokoll
Diffstat (limited to 'ue2')
-rw-r--r--ue2/protokoll/protokoll.tex84
1 files changed, 74 insertions, 10 deletions
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\\
18 18
19% create titlepage 19% create titlepage
20\maketitle 20\maketitle
21 21\parindent 0pt
22\tableofcontents 22\tableofcontents
23\newpage 23\newpage
24 24
@@ -32,16 +32,36 @@ Manuel Mausz, \matrnr 0728348\\
32 32
33%------------------------------------------------------------------ 33%------------------------------------------------------------------
34%------------------------------------------------------------------ 34%------------------------------------------------------------------
35 35\newpage
36\section{Beispiel 2} 36\section{Beispiel 2}
37 37
38\subsection{Design}\label{Design} 38\subsection{Design}\label{Design}
39 39
40Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe. 40Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe.
41 41
42\parskip 30pt
43Refaktorisirung:
44
45\parskip 12pt
46Notwendigerweise und wie verlangt wurde die Klasse \mbox{CBitmap} zu einer abstrakten Interfaceklasse umgewandelt.
47Diese stellt nun die Oberklasse der zu unterstützenden Dateiformate dar und enthält verschieden virtuelle Methoden, die
48von ihren Unterklassen zu implementieren sind. Dazu gehören, die schon aus Beispiel 1, bekannten Methoden \mbox{read()} und \mbox{write()},
49welche das Einlesen und Schreiben der Bilddaten realisieren. Hinzugekommen sind nun verschiedene ``getter'' Methoden,
50wie zB.: \mbox{getHeight()} oder \mbox{getWidth()}, die vom direkten Zugriff auf die Bild-Informationen im jeweiligen Header-Speicher, der als
51``struct'' deklariert wurde, abstrahieren.\\
52Die Methoden, zur Realisierung der einzelnen in den Aufgabenstellungen verlangten Befehle, wurden als ``protected'', in der zugehörigen cbitmap.cpp Datei,
53generisch implementiert. Mit dieser Vorgehensweise war es möglich, die zu unterstützenden Dateiformate, auf ihre Eigenheiten
54beschränkt, zu realisieren und Code wieder zu verwenden.
55Unterklassen sind CWindowsBitmap aus Aufgabenstellung 1 und das neu hinzugekommene Format Pixmap. \\
56
57\parskip 12pt
58Die abstrakte Interfaceklasse \mbox{CPixelFormat} wurde aus Beispiel 1 übernommen und enthält genauso, neben \mbox{getPixel()} und \mbox{setPixel()}, zusätzliche
59virtuelle Methoden, die von den Unterklassen zu implementieren sind und Informationen zu den, von ihnen zu verarbeitenden Pixelcodierung, bereitstellen.
60Weiters wurde eine Datenstruktur als Type, namens \mbox{RGBPIXEL}, eingeführt, welche zur Übergabe der Farbwerte, der einzelnen Pixel, dient.
61Unterklassen sind \mbox{CPixelformat\_brg24} aus Aufgabenstellung 1, sowie die neuen Formate \mbox{CPixelformat\_brg555} und \mbox{CPixelformat\_Indexed8}. \\
42 62
43TODO
44 63
64\newpage
45%================================================================== 65%==================================================================
46\begin{figure}[htb] 66\begin{figure}[htb]
47\begin{center} 67\begin{center}
@@ -52,28 +72,72 @@ TODO
52\end{figure} 72\end{figure}
53%================================================================== 73%==================================================================
54 74
55 75\newpage
56\subsection{Verwaltung der Ressourcen} 76\subsection{Verwaltung der Ressourcen}
57 77
58TODO 78Die Vorgehensweise bei der Ressourcenverwaltung wurde größtenteils von Aufgabe 1 übernommen.
79Neu dazugekommen sind Funktionalitäten zur Verwaltung von Farbtabellen.
80Dabei wurde ebenfalls ein generisches Konzept entwickelt, welches Unterschiede in der Farb-Indizierung ausgleichen soll.
81Erwähnt sei, dass vorerst nur Farbwerte in hexadezimaler Form, sowie der Pixmap eigene Darstellungs-Modus ``c'' unterstützt werden.
82Beim Einlesen der Pixeldaten, welche die Indizes der zugeordneten Farbwert darstellen, werden diese mit internen, allgemeineren Indizes,
83der Form 0,1,2 .. n ausgetauscht. Die Farbtabelle wird in einer ``map'', welche im abstrakten Interface CBitmap deklariert ist und die internen
84Indizes als Schlüssel erwartet, abgelegt.
85Farbwerte werden dabei in der, in Abschnitt 2.1 erwähnten Datenstrucktur \mbox{RGBPIXEL} organisiert, für die dynamisch Speicher alloziert wird.
86Die Freigabe dieser Ressourcen erfolgt wieder im Destruktor von \mbox{CBitmap}. \\
87
59 88
60\subsection{Fehlerbehandlung} 89\subsection{Fehlerbehandlung}
61 90
62TODO 91Die Fehlerbehandlung erfolgt nach wie vor über \mbox{CPixelFormat::PixelFormatError}, \mbox{CFile::FileError}, \mbox{CScriptParser::ParserError}
92und dem ``try-catch'' Block im Hauptprogramm. Die Header und Pixeldaten werden beim einlesn, gemäß der Spezifikation, auf Korrektheit überprüft.
93Im Fehlerfall wird eine Exeception geworfen, eine Fehlerbeschreibung über stderr ausgegeben und das Programm beendet.
63 94
64\subsection{Implementierung} 95\subsection{Implementierung}
65 96
66TODO 97Im Folgenden werden einige Implementierungauszüge, der geforderten Funktionen, gezeigt.
98Siehe auch Punkt~\ref{Design} und Abbildung~\ref{fig:classdiagram1} sowie
99Punkt~\ref{Listings}.
67 100
68%------------------------------------------------------------------ 101Im Falle eines Bildes mit Farbtabelle ist es nur notwendig, die Farbwerte in der Tabelle zu ändern.
69%------------------------------------------------------------------ 102
103Die Farbtabelle ist in folgender Form in der abstrakten Interfaceklasse \mbox{CBitmap} deklariert.
104%==================================================================
105\begin{lstlisting}{}
106 std::map<uint32_t, CPixelFormat::RGBPIXEL *> m_colortable;
107\end{lstlisting}
108%==================================================================
70 109
110Beim schreiben der Bilddaten werden die Pixedaten und Indizes der Farbtabelle wieder in Characters zurückkonveriert.
111%==================================================================
112\begin{lstlisting}{}
113 #define PIXMAP_COLORCHARS ".#abcdefghijklmnopqrstuvwxyzABCD" \
114 "EFGHIJKLMNOPQRSTUVWXYZ0123456789"
115\end{lstlisting}
116%====
117
118inver():
119Beispiel für die Invertierung eines Farbwertes in einer Rastergrafik.
120%==================================================================
121\begin{lstlisting}{}
122 pixel.red = max.red - pixel.red;
123\end{lstlisting}
124%====
125
126brightness(params):
127Beispiel für die veränderung der Helligkeit eines Bildpunktes.
128%==================================================================
129\begin{lstlisting}{}
130 pixel.red = min(max.red, static_cast<uint32_t>(pixel.red * factor));
131\end{lstlisting}
132%====
71\section{Projektverlauf} 133\section{Projektverlauf}
72 134
73 135
74\subsection{Probleme und Fallstricke} 136\subsection{Probleme und Fallstricke}
75 137
76TODO 138Die Schwierigkeit bestand darin, einen Weg zu finden Bildformate mit Farbtabellen gleichermaßen zu behandeln, wie jene, die die Farbwerte direkt im Bildspeicher halten.
139Durch die virtuelle Methode \mbox{const bool hasColorTable()} in der abstrakten Interfaceklasse \mbox{CBitmap} ist es möglich die Abarbeitung von Operationen auf den
140Bilddaten entsprechend zu delegieren.
77 141
78\subsection{Arbeitsaufwand} 142\subsection{Arbeitsaufwand}
79 143