diff --git a/imageInput.c b/imageInput.c index 23cb115..a1e995c 100644 --- a/imageInput.c +++ b/imageInput.c @@ -6,13 +6,31 @@ #define BUFFER_SIZE 100 #define FILE_HEADER_STRING "__info2_image_file_format__" -// TODO Implementieren Sie geeignete Hilfsfunktionen für das Lesen der Bildserie aus einer Datei +//Datei öffnen, Header, Anzahl, Höhe und Breite lesen, geöffnete Datei zurückgeben static FILE* openAndReadShort (const char *path, unsigned short *count, unsigned short *width, unsigned short *height) { FILE *file = fopen(path, "rb"); if (!file) { - perror("Konnte Datei nicht finden"); return NULL; } + size_t headerLength = strlen(FILE_HEADER_STRING); + char *header = malloc (headerLength + 1); + if(!header) { + return NULL; + } + + if (fread(header, sizeof(char), headerLength, file) != headerLength) { + free (header); + return NULL; + } + + header[headerLength] = '\0'; + + if (strcmp (header, FILE_HEADER_STRING) != 0) { + free(header); + return NULL; + } + + free (header); fread(count, sizeof(unsigned short), 1, file); fread(width, sizeof(unsigned short), 1, file); @@ -21,6 +39,7 @@ static FILE* openAndReadShort (const char *path, unsigned short *count, unsigned return file; } +//Speicher anlegen und Pixel eines Bildes einlesen static GrayScaleImage* readPixles (FILE *file, unsigned short *width, unsigned short *height) { GrayScaleImage *image = malloc (sizeof(GrayScaleImage)); image->width = *width; @@ -43,13 +62,17 @@ static GrayScaleImage* readPixles (FILE *file, unsigned short *width, unsigned s return image; } -// TODO Vervollständigen Sie die Funktion readImages unter Benutzung Ihrer Hilfsfunktionen + +//Ausführen von openAndReadShort, Anlegen des Speichers für Bilderserie, readPixles wird für jedes Bild ausgeführt +//Nach jedem Bild wird das zugehörige Label gelesen, bei sämtlichen Fehlern wird NULL zurückgegeben und Speicher durch clearSeries bereinigt GrayScaleImageSeries *readImages(const char *path) { unsigned short count = 0, width = 0, height = 0; FILE *file = openAndReadShort(path, &count, &width, &height); - + if (file == 0) { + return NULL; + } GrayScaleImageSeries *series = malloc(sizeof(GrayScaleImageSeries)); if (!series) { fclose(file); @@ -76,12 +99,13 @@ GrayScaleImageSeries *readImages(const char *path) return series; } -// TODO Vervollständigen Sie die Funktion clearSeries, welche eine Bildserie vollständig aus dem Speicher freigibt +//Bereinigt den Speicher void clearSeries(GrayScaleImageSeries *series) { for (unsigned int i = 0; i < series->count; i++) { free(series->images[i].buffer); } + free(series->images); free(series->labels); free(series); diff --git a/testFile.info2 b/testFile.info2 index 86c028a..1ea3b4c 100644 Binary files a/testFile.info2 and b/testFile.info2 differ