diff options
| -rw-r--r-- | ue2/protokoll.pdf | bin | 0 -> 470271 bytes | |||
| -rw-r--r-- | ue2/protokoll/protokoll.tex | 60 |
2 files changed, 30 insertions, 30 deletions
diff --git a/ue2/protokoll.pdf b/ue2/protokoll.pdf new file mode 100644 index 0000000..6a01a69 --- /dev/null +++ b/ue2/protokoll.pdf | |||
| Binary files 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\\ | |||
| 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 | 42 | \parskip 30pt |
| 43 | Refaktorisirung: | 43 | Refaktorisierung: |
| 44 | 44 | ||
| 45 | \parskip 12pt | 45 | \parskip 12pt |
| 46 | Notwendigerweise und wie verlangt wurde die Klasse \mbox{CBitmap} zu einer abstrakten Interfaceklasse umgewandelt. | 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 | 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()}, | 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, | 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 | 50 | wie z.B. \mbox{getHeight()} oder \mbox{getWidth()}, die vom direkten Zugriff auf allgemeine Bildinformationen abstrahieren.\\ |
| 51 | ``struct'' deklariert wurde, abstrahieren.\\ | 51 | Die gemäß Aufgabenstellungen verlangten Befehle zur Bildbearbeiten, wurden in abstrakten Interfaceklasse CBitmap als ``protected'' |
| 52 | Die Methoden, zur Realisierung der einzelnen in den Aufgabenstellungen verlangten Befehle, wurden als ``protected'', in der zugehörigen cbitmap.cpp Datei, | 52 | generisch für alle Bildformate implementiert. Mit dieser Vorgehensweise war es möglich, die zu unterstützenden Dateiformate auf ihre Eigenheiten |
| 53 | generisch implementiert. Mit dieser Vorgehensweise war es möglich, die zu unterstützenden Dateiformate, auf ihre Eigenheiten | 53 | zu beschränken, diese zu realisieren und allgemeinen Code wieder zu verwenden. |
| 54 | beschränkt, zu realisieren und Code wieder zu verwenden. | 54 | Unterklassen sind CWindowsBitmap aus Aufgabenstellung 1 und für das neu hinzugekommene Format Pixmap die Klasse CPixmap. \\ |
| 55 | Unterklassen sind CWindowsBitmap aus Aufgabenstellung 1 und das neu hinzugekommene Format Pixmap. \\ | ||
| 56 | 55 | ||
| 57 | \parskip 12pt | 56 | \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 | 57 | Die abstrakte Interfaceklasse \mbox{CPixelFormat} wurde aus Beispiel 1 übernommen und enthält nun 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. | 58 | 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. | 59 | Weiters wurde die Datenstruktur \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}. \\ | 60 | Unterklassen sind \mbox{CPixelformat\_BRG24} aus Beispiel 1 sowie die neuen Formate \mbox{CPixelformat\_BRG55} und \mbox{CPixelformat\_Indexed8}. \\ |
| 62 | 61 | ||
| 63 | \parskip 30pt | 62 | \parskip 30pt |
| 64 | Asserts: | 63 | Asserts: |
| 65 | 64 | ||
| 66 | \parskip 12pt | 65 | \parskip 12pt |
| 67 | Beim einlesen und bearbeiten von Bilddaten wurden Zusicherungen deklariert, welche die Größe und Existenz der Bilddaten validieren. | 66 | Beim Einlesen und Bearbeiten von Bilddaten wurden Zusicherungen deklariert, welche die Größe und Existenz der Bilddaten sicherstellen. |
| 67 | |||
| 68 | \newpage | 68 | \newpage |
| 69 | %================================================================== | 69 | %================================================================== |
| 70 | \begin{figure}[htb] | 70 | \begin{figure}[htb] |
| @@ -80,29 +80,29 @@ Beim einlesen und bearbeiten von Bilddaten wurden Zusicherungen deklariert, welc | |||
| 80 | \subsection{Verwaltung der Ressourcen} | 80 | \subsection{Verwaltung der Ressourcen} |
| 81 | 81 | ||
| 82 | Die Vorgehensweise bei der Ressourcenverwaltung wurde größtenteils von Aufgabe 1 übernommen. | 82 | Die Vorgehensweise bei der Ressourcenverwaltung wurde größtenteils von Aufgabe 1 übernommen. |
| 83 | Neu dazugekommen sind Funktionalitäten zur Verwaltung von Farbtabellen. | 83 | Neu hinzugekommen sind Funktionalitäten zur Verwaltung von Farbtabellen. |
| 84 | Dabei wurde ebenfalls ein generisches Konzept entwickelt, welches Unterschiede in der Farb-Indizierung ausgleichen soll. | 84 | Dabei wurde ebenfalls ein generisches Konzept gewählt, welches Unterschiede in der Farbindizierung ausgleichen soll. |
| 85 | 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. | 85 | 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. |
| 86 | Beim Einlesen der Pixeldaten, welche die Indizes der zugeordneten Farbwert darstellen, werden diese mit internen, allgemeineren Indizes, | 86 | Beim Einlesen der Pixeldaten, welche die Indizes der zugeordneten Farbwert darstellen, werden diese mit internen, allgemeineren Indizes |
| 87 | der Form 0,1,2 .. n ausgetauscht. Die Farbtabelle wird in einer ``map'', welche im abstrakten Interface CBitmap deklariert ist und die internen | 87 | 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 |
| 88 | Indizes als Schlüssel erwartet, abgelegt. | 88 | Indizes als Schlüssel erwartet, abgelegt. |
| 89 | Farbwerte werden dabei in der, in Abschnitt 2.1 erwähnten Datenstrucktur \mbox{RGBPIXEL} organisiert, für die dynamisch Speicher alloziert wird. | 89 | Farbwerte werden dabei in der in Abschnitt 2.1 erwähnten Datenstruktur \mbox{RGBPIXEL}, für die dynamisch Speicher alloziert werden muss, organisiert. |
| 90 | Die Freigabe dieser Ressourcen erfolgt wieder im Destruktor von \mbox{CBitmap}. \\ | 90 | Die Freigabe dieser Ressourcen erfolgt wieder im Destruktor von \mbox{CBitmap}.\\ |
| 91 | 91 | ||
| 92 | 92 | ||
| 93 | \subsection{Fehlerbehandlung} | 93 | \subsection{Fehlerbehandlung} |
| 94 | 94 | ||
| 95 | Die Fehlerbehandlung erfolgt nach wie vor über \mbox{CPixelFormat::PixelFormatError}, \mbox{CFile::FileError}, \mbox{CScriptParser::ParserError} | 95 | Die Fehlerbehandlung erfolgt nach wie vor über die Übersetzung der Exceptions \mbox{CPixelFormat::PixelFormatError}, \mbox{CFile::FileError}, \mbox{CScriptParser::ParserError} |
| 96 | und dem ``try-catch'' Block im Hauptprogramm. Die Header und Pixeldaten werden beim einlesn, gemäß der Spezifikation, auf Korrektheit überprüft. | 96 | und dem ``try-catch'' Block im Hauptprogramm. Die Header und Pixeldaten werden beim Einlesen rudimentär, aber gemäß der Spezifikation, auf Korrektheit überprüft. |
| 97 | Im Fehlerfall wird eine Exeception geworfen, eine Fehlerbeschreibung über stderr ausgegeben und das Programm beendet. | 97 | Im Fehlerfall wird eine Exception geworfen, eine Fehlerbeschreibung über stderr ausgegeben und das Programm beendet. |
| 98 | 98 | ||
| 99 | \subsection{Implementierung} | 99 | \subsection{Implementierung} |
| 100 | 100 | ||
| 101 | Im Folgenden werden einige Implementierungauszüge, der geforderten Funktionen, gezeigt. | 101 | Im Folgenden werden einige Implementierungauszüge der geforderten Funktionen gezeigt. |
| 102 | Siehe auch Punkt~\ref{Design} und Abbildung~\ref{fig:classdiagram1} sowie | 102 | Siehe auch Punkt~\ref{Design} und Abbildung~\ref{fig:classdiagram1} sowie |
| 103 | Punkt~\ref{Listings}. | 103 | Punkt~\ref{Listings}. |
| 104 | 104 | ||
| 105 | Im Falle eines Bildes mit Farbtabelle ist es nur notwendig, die Farbwerte in der Tabelle zu ändern. | 105 | Im Falle eines Bildes mit Farbtabelle ist es nur notwendig die Farbwerte in der Tabelle zu ändern. |
| 106 | 106 | ||
| 107 | Die Farbtabelle ist in folgender Form in der abstrakten Interfaceklasse \mbox{CBitmap} deklariert. | 107 | Die Farbtabelle ist in folgender Form in der abstrakten Interfaceklasse \mbox{CBitmap} deklariert. |
| 108 | %================================================================== | 108 | %================================================================== |
| @@ -113,7 +113,7 @@ Die Farbtabelle ist in folgender Form in der abstrakten Interfaceklasse \mbox{CB | |||
| 113 | 113 | ||
| 114 | 114 | ||
| 115 | \newpage | 115 | \newpage |
| 116 | Beim schreiben der \mbox{CPixmap} Bilddaten werden die Pixel und Indizes der Farbtabelle wieder in Characters zurückkonveriert. | 116 | Beim Schreiben der Bilddaten für das Format Pixmap werden die Pixel und Indizes der Farbtabelle wieder in korrekte Identifier zurückkonvertiert. |
| 117 | %================================================================== | 117 | %================================================================== |
| 118 | \begin{lstlisting}{} | 118 | \begin{lstlisting}{} |
| 119 | #define PIXMAP_COLORCHARS ".#abcdefghijklmnopqrstuvwxyzABCD" \ | 119 | #define PIXMAP_COLORCHARS ".#abcdefghijklmnopqrstuvwxyzABCD" \ |
| @@ -130,7 +130,7 @@ Beispiel für die Invertierung eines Farbwertes in einer Rastergrafik. | |||
| 130 | %==== | 130 | %==== |
| 131 | 131 | ||
| 132 | brightness(params): | 132 | brightness(params): |
| 133 | Beispiel für die veränderung der Helligkeit eines Bildpunktes. | 133 | Beispiel für die Veränderung der Helligkeit eines Bildpunktes. |
| 134 | %================================================================== | 134 | %================================================================== |
| 135 | \begin{lstlisting}{} | 135 | \begin{lstlisting}{} |
| 136 | pixel.red = min(max.red, static_cast<uint32_t>(pixel.red * factor)); | 136 | pixel.red = min(max.red, static_cast<uint32_t>(pixel.red * factor)); |
| @@ -141,8 +141,8 @@ Beispiel für die veränderung der Helligkeit eines Bildpunktes. | |||
| 141 | 141 | ||
| 142 | \subsection{Probleme und Fallstricke} | 142 | \subsection{Probleme und Fallstricke} |
| 143 | 143 | ||
| 144 | Die Schwierigkeit bestand darin, einen Weg zu finden Bildformate mit Farbtabellen gleichermaßen zu behandeln, wie jene, die die Farbwerte direkt im Bildspeicher halten. | 144 | Die Schwierigkeit bestand darin, einen Weg zu finden, Bildformate mit Farbtabellen gleichermaßen zu behandeln, wie jene, die die Farbwerte direkt im Bildspeicher halten. |
| 145 | Durch die virtuelle Methode \mbox{const bool hasColorTable()} in der abstrakten Interfaceklasse \mbox{CBitmap} ist es möglich die Abarbeitung von Operationen auf den | 145 | Durch die virtuelle Methode \mbox{const bool hasColorTable()} in der abstrakten Interfaceklasse \mbox{CBitmap} ist es möglich die Abarbeitung von Bildoperationen auf den |
| 146 | Bilddaten entsprechend zu delegieren. | 146 | Bilddaten entsprechend zu delegieren. |
| 147 | 147 | ||
| 148 | \subsection{Arbeitsaufwand} | 148 | \subsection{Arbeitsaufwand} |
