From 7ea80137b0fee28fca9dff9426ebc64ed7108d39 Mon Sep 17 00:00:00 2001 From: Fabrice Date: Mon, 24 Nov 2025 10:35:46 +0100 Subject: [PATCH] =?UTF-8?q?Header=20wird=20gelesen,=20l=C3=A4uft=20alles?= =?UTF-8?q?=20optimal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- imageInput.c | 34 +++++++++++++++++++++++++++++----- testFile.info2 | Bin 163 -> 26 bytes 2 files changed, 29 insertions(+), 5 deletions(-) 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 86c028aa6e3659c877027bd8162a76794eb79767..1ea3b4c2c12dae2ce08c20253f12fba140248f8d 100644 GIT binary patch literal 26 RcmXTU&rOXlNlaJ3003Yy1&{y$ literal 163 qcma!#&&*59H;T{9O-xUXPs_{!68S~Bi6!yzObi@ANGV{X*Z=@TD+;&(