From 570e3fa930007fae72a9b467ab2de27ded31358a Mon Sep 17 00:00:00 2001 From: "Chris.F" Date: Mon, 9 Nov 2026 23:18:13 +0100 Subject: [PATCH] in imageinput.c Hilfsfunktionen und readimages implementiert, 2 von 6 passes --- Startcode/imageInput.c | 69 ++++++++++++++++++++++++++++++---------- Startcode/testFile.info2 | 1 + 2 files changed, 53 insertions(+), 17 deletions(-) create mode 100644 Startcode/testFile.info2 diff --git a/Startcode/imageInput.c b/Startcode/imageInput.c index 9fcc23e..f9432c2 100644 --- a/Startcode/imageInput.c +++ b/Startcode/imageInput.c @@ -7,48 +7,83 @@ #define FILE_HEADER_STRING "__info2_image_file_format__" // TODO Implementieren Sie geeignete Hilfsfunktionen für das Lesen der Bildserie aus einer Datei -static unsigned short readNumberOfImages(const char *path) +static unsigned short readNumberOfImages(FILE *file) { unsigned short numberOfImages = 0; - fseek(path, sizeof(char)*strlen(FILE_HEADER_STRING)-1, SEEK_SET); - fread(numberOfImages, sizeof(unsigned short), 1, path); + fseek(file, strlen(FILE_HEADER_STRING), SEEK_SET); + fread(&numberOfImages, sizeof(unsigned short), 1, file); return numberOfImages; } -static unsigned short readImageWidth(const char *path) +static unsigned short readImageWidth(FILE *file) { unsigned short ImageWidth = 0; - fseek(path, sizeof(unsigned short), SEEK_CUR); - fread(ImageWidth, sizeof(unsigned short), 1, path); + fseek(file, sizeof(unsigned short), SEEK_CUR); + fread(&ImageWidth, sizeof(unsigned short), 1, file); + return ImageWidth; } -static unsigned short readImageHeight(const char *path) +static unsigned short readImageHeight(FILE *file) { unsigned short ImageHeight = 0; - fseek(path, sizeof(unsigned short), SEEK_CUR); - fread(ImageHeight, sizeof(unsigned short), 1,path); + fseek(file, sizeof(unsigned short), SEEK_CUR); + fread(&ImageHeight, sizeof(unsigned short), 1, file); return ImageHeight; - } -static *readImage(const char *path, unsigned short ImageWidth, unsigned short ImageHeight) +static GrayScalePixelType *readImage(FILE *file, unsigned short ImageWidth, unsigned short ImageHeight) { - fseek(path, sizeof(unsigned short), SEEK_CUR); - fread(path, sizeof(char), ImageHeight*ImageWidth, path); + GrayScalePixelType *image = malloc(ImageHeight*ImageWidth*sizeof(GrayScalePixelType)); + fseek(file, sizeof(unsigned short), SEEK_CUR); + fread(image, sizeof(char), ImageHeight*ImageWidth, file); + return image; + +} + +static GrayScalePixelType readLabel(FILE *file) +{ + unsigned char label; + fseek(file, sizeof(unsigned short), SEEK_CUR); + fread(&label, sizeof(unsigned char), 1, file); + return label; } // TODO Vervollständigen Sie die Funktion readImages unter Benutzung Ihrer Hilfsfunktionen GrayScaleImageSeries *readImages(const char *path) { - GrayScaleImageSeries *series = NULL; - FILE *file = fopen(path, "wb"); - + FILE *file = fopen(path, "rb"); + if (file == NULL) + { + return NULL; + } + unsigned short numberOfImages = readNumberOfImages(file); + unsigned short imageWidth = readImageWidth(file); + unsigned short imageHeight = readImageHeight(file); + + GrayScaleImageSeries *series = malloc(sizeof(GrayScaleImageSeries)); + if(series == NULL) + { + fclose(file); + return NULL; + } + + series->count = numberOfImages; + series->images = malloc(numberOfImages * sizeof(GrayScaleImage)); + series->labels = malloc(numberOfImages * sizeof(unsigned char)); + + + for(int i = 0; i < numberOfImages; i++) + { + series->images[i].width = imageWidth; + series->images[i].height = imageHeight; + series->images[i].buffer = readImage(file, imageWidth, imageHeight); + series->labels[i] = readLabel(file); + } fclose(file); - return series; } diff --git a/Startcode/testFile.info2 b/Startcode/testFile.info2 new file mode 100644 index 0000000..1ea3b4c --- /dev/null +++ b/Startcode/testFile.info2 @@ -0,0 +1 @@ +some_tag \ No newline at end of file