From 828c315bc3f0d73466180ca93c643251143267ab Mon Sep 17 00:00:00 2001 From: Thomas Rauh Desktop Date: Sat, 8 Nov 2025 18:54:28 +0100 Subject: [PATCH] ImageInput Funktion --- imageInput.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++ testFile.info2 | Bin 0 -> 163 bytes 2 files changed, 56 insertions(+) create mode 100644 testFile.info2 diff --git a/imageInput.c b/imageInput.c index bb30de1..3caa626 100644 --- a/imageInput.c +++ b/imageInput.c @@ -7,16 +7,72 @@ #define FILE_HEADER_STRING "__info2_image_file_format__" // TODO Implementieren Sie geeignete Hilfsfunktionen für das Lesen der Bildserie aus einer Datei +static void einzelBild(unsigned char *ausgelesen, FILE *file, GrayScaleImageSeries *series, unsigned short int breite, unsigned short int hoehe, unsigned char bildnummer){ + GrayScaleImage bild; + bild.height = hoehe; + bild.width = breite; + bild.buffer = malloc(sizeof(GrayScalePixelType)*hoehe*breite); + if(fread(ausgelesen,sizeof(unsigned short), hoehe*breite +1, file)== (breite*hoehe + 1)){ + series->labels[bildnummer] = ausgelesen[breite*hoehe]; + for(int i=0;i<(breite*hoehe)-1;i++){ //Wusste nicht, wie ich letzten Wert "nichtig" mache, weil sonst overflow + bild.buffer[i]=ausgelesen[i]; + } + series->images[bildnummer]= bild; + } + else{ + printf("Fehler bei Bildeinlesen\n"); + } +} // TODO Vervollständigen Sie die Funktion readImages unter Benutzung Ihrer Hilfsfunktionen GrayScaleImageSeries *readImages(const char *path) { GrayScaleImageSeries *series = NULL; + FILE *file; + unsigned short int breite; + unsigned short int hoehe; + unsigned char *ausgelesen; + + + ausgelesen = malloc(sizeof(char)*BUFFER_SIZE); + file = fopen(path,"rb"); + if(file==NULL){ //Fehlerbehandlung + printf("Fehler bei File-Suche\n"); + fclose(file); + return series; + } + fseek(file,(sizeof(unsigned char)*strlen(FILE_HEADER_STRING)), SEEK_SET); //Lese Offset um Fileheader + + if(fread(ausgelesen,sizeof(unsigned short), 3, file)==3){ //restliche ersete Zeile lesen + series->count = (unsigned short int)ausgelesen[0]; + breite = (unsigned short int)ausgelesen[1]; + hoehe = (unsigned short int)ausgelesen[2]; + + series->images = malloc(sizeof(GrayScaleImage)*series->count); + series->labels = malloc(sizeof(unsigned char)*series->count); + + } + + for(int bildnummer=0; bildnummer count;bildnummer++){ + einzelBild(ausgelesen, file, series, breite, hoehe, bildnummer); + } + + free(ausgelesen); + fclose(file); return series; } // TODO Vervollständigen Sie die Funktion clearSeries, welche eine Bildserie vollständig aus dem Speicher freigibt void clearSeries(GrayScaleImageSeries *series) { + int anzahl = series->count; + for(int i=0;iimages[i].height); + free(&series->images[i].width); + free(series->images[i].buffer); + } + free(series->labels); + free(series->images); + free(series); } \ No newline at end of file diff --git a/testFile.info2 b/testFile.info2 new file mode 100644 index 0000000000000000000000000000000000000000..86c028aa6e3659c877027bd8162a76794eb79767 GIT binary patch literal 163 qcma!#&&*59H;T{9O-xUXPs_{!68S~Bi6!yzObi@ANGV{X*Z=@TD+;&( literal 0 HcmV?d00001