diff options
| author | Günther Neuwirth <e0626638@student.tuwien.ac.at> | 2009-05-03 17:01:43 +0200 |
|---|---|---|
| committer | Günther Neuwirth <e0626638@student.tuwien.ac.at> | 2009-05-03 17:01:43 +0200 |
| commit | bdd1405e71940630d29004a597fe8ae6afd6af47 (patch) | |
| tree | 50d3e5e1ab5554f01a24254e6425657da3a0eac2 /ue2 | |
| parent | c9945c50c3cfd49c00a458e3f0be7ef5be60439f (diff) | |
| download | ooprog-bdd1405e71940630d29004a597fe8ae6afd6af47.tar.gz ooprog-bdd1405e71940630d29004a597fe8ae6afd6af47.tar.bz2 ooprog-bdd1405e71940630d29004a597fe8ae6afd6af47.zip | |
Protokoll
Diffstat (limited to 'ue2')
| -rw-r--r-- | ue2/protokoll/protokoll.tex | 84 |
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 | ||
| 40 | Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe. | 40 | Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe. |
| 41 | 41 | ||
| 42 | \parskip 30pt | ||
| 43 | Refaktorisirung: | ||
| 44 | |||
| 45 | \parskip 12pt | ||
| 46 | Notwendigerweise und wie verlangt wurde die Klasse \mbox{CBitmap} zu einer abstrakten Interfaceklasse umgewandelt. | ||
| 47 | Diese stellt nun die Oberklasse der zu unterstützenden Dateiformate dar und enthält verschieden virtuelle Methoden, die | ||
| 48 | von ihren Unterklassen zu implementieren sind. Dazu gehören, die schon aus Beispiel 1, bekannten Methoden \mbox{read()} und \mbox{write()}, | ||
| 49 | welche das Einlesen und Schreiben der Bilddaten realisieren. Hinzugekommen sind nun verschiedene ``getter'' Methoden, | ||
| 50 | wie 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.\\ | ||
| 52 | Die Methoden, zur Realisierung der einzelnen in den Aufgabenstellungen verlangten Befehle, wurden als ``protected'', in der zugehörigen cbitmap.cpp Datei, | ||
| 53 | generisch implementiert. Mit dieser Vorgehensweise war es möglich, die zu unterstützenden Dateiformate, auf ihre Eigenheiten | ||
| 54 | beschränkt, zu realisieren und Code wieder zu verwenden. | ||
| 55 | Unterklassen sind CWindowsBitmap aus Aufgabenstellung 1 und das neu hinzugekommene Format Pixmap. \\ | ||
| 56 | |||
| 57 | \parskip 12pt | ||
| 58 | Die abstrakte Interfaceklasse \mbox{CPixelFormat} wurde aus Beispiel 1 übernommen und enthält genauso, neben \mbox{getPixel()} und \mbox{setPixel()}, zusätzliche | ||
| 59 | virtuelle Methoden, die von den Unterklassen zu implementieren sind und Informationen zu den, von ihnen zu verarbeitenden Pixelcodierung, bereitstellen. | ||
| 60 | Weiters wurde eine Datenstruktur als Type, namens \mbox{RGBPIXEL}, eingeführt, welche zur Übergabe der Farbwerte, der einzelnen Pixel, dient. | ||
| 61 | Unterklassen sind \mbox{CPixelformat\_brg24} aus Aufgabenstellung 1, sowie die neuen Formate \mbox{CPixelformat\_brg555} und \mbox{CPixelformat\_Indexed8}. \\ | ||
| 42 | 62 | ||
| 43 | TODO | ||
| 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 | ||
| 58 | TODO | 78 | Die Vorgehensweise bei der Ressourcenverwaltung wurde größtenteils von Aufgabe 1 übernommen. |
| 79 | Neu dazugekommen sind Funktionalitäten zur Verwaltung von Farbtabellen. | ||
| 80 | Dabei wurde ebenfalls ein generisches Konzept entwickelt, welches Unterschiede in der Farb-Indizierung ausgleichen soll. | ||
| 81 | Erwähnt sei, dass vorerst nur Farbwerte in hexadezimaler Form, sowie der Pixmap eigene Darstellungs-Modus ``c'' unterstützt werden. | ||
| 82 | Beim Einlesen der Pixeldaten, welche die Indizes der zugeordneten Farbwert darstellen, werden diese mit internen, allgemeineren Indizes, | ||
| 83 | der Form 0,1,2 .. n ausgetauscht. Die Farbtabelle wird in einer ``map'', welche im abstrakten Interface CBitmap deklariert ist und die internen | ||
| 84 | Indizes als Schlüssel erwartet, abgelegt. | ||
| 85 | Farbwerte werden dabei in der, in Abschnitt 2.1 erwähnten Datenstrucktur \mbox{RGBPIXEL} organisiert, für die dynamisch Speicher alloziert wird. | ||
| 86 | Die Freigabe dieser Ressourcen erfolgt wieder im Destruktor von \mbox{CBitmap}. \\ | ||
| 87 | |||
| 59 | 88 | ||
| 60 | \subsection{Fehlerbehandlung} | 89 | \subsection{Fehlerbehandlung} |
| 61 | 90 | ||
| 62 | TODO | 91 | Die Fehlerbehandlung erfolgt nach wie vor über \mbox{CPixelFormat::PixelFormatError}, \mbox{CFile::FileError}, \mbox{CScriptParser::ParserError} |
| 92 | und dem ``try-catch'' Block im Hauptprogramm. Die Header und Pixeldaten werden beim einlesn, gemäß der Spezifikation, auf Korrektheit überprüft. | ||
| 93 | Im Fehlerfall wird eine Exeception geworfen, eine Fehlerbeschreibung über stderr ausgegeben und das Programm beendet. | ||
| 63 | 94 | ||
| 64 | \subsection{Implementierung} | 95 | \subsection{Implementierung} |
| 65 | 96 | ||
| 66 | TODO | 97 | Im Folgenden werden einige Implementierungauszüge, der geforderten Funktionen, gezeigt. |
| 98 | Siehe auch Punkt~\ref{Design} und Abbildung~\ref{fig:classdiagram1} sowie | ||
| 99 | Punkt~\ref{Listings}. | ||
| 67 | 100 | ||
| 68 | %------------------------------------------------------------------ | 101 | Im Falle eines Bildes mit Farbtabelle ist es nur notwendig, die Farbwerte in der Tabelle zu ändern. |
| 69 | %------------------------------------------------------------------ | 102 | |
| 103 | Die 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 | ||
| 110 | Beim 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 | |||
| 118 | inver(): | ||
| 119 | Beispiel 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 | |||
| 126 | brightness(params): | ||
| 127 | Beispiel 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 | ||
| 76 | TODO | 138 | Die Schwierigkeit bestand darin, einen Weg zu finden Bildformate mit Farbtabellen gleichermaßen zu behandeln, wie jene, die die Farbwerte direkt im Bildspeicher halten. |
| 139 | Durch die virtuelle Methode \mbox{const bool hasColorTable()} in der abstrakten Interfaceklasse \mbox{CBitmap} ist es möglich die Abarbeitung von Operationen auf den | ||
| 140 | Bilddaten entsprechend zu delegieren. | ||
| 77 | 141 | ||
| 78 | \subsection{Arbeitsaufwand} | 142 | \subsection{Arbeitsaufwand} |
| 79 | 143 | ||
