diff --git a/imageInput.c b/imageInput.c index a50bb92..8187d91 100644 --- a/imageInput.c +++ b/imageInput.c @@ -7,16 +7,19 @@ #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(char *ausgelesen, FILE *file, GrayScaleImageSeries *series, unsigned short int breite, unsigned short int hoehe, unsigned char bildnummer){ +static void einzelBild(unsigned char *px_ls, 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]; + int anz = fread(px_ls,sizeof(unsigned char), hoehe*breite +1, file); + //printf("Test\n%d\n%d\n",anz, (breite*hoehe + 1)); + + if(anz == (breite*hoehe + 1)){ + series->labels[bildnummer] = px_ls[breite*hoehe]; + for(int i=0;i<(breite*hoehe)-1;i++){ + bild.buffer[i]=px_ls[i]; } series->images[bildnummer]= bild; } @@ -32,6 +35,10 @@ GrayScaleImageSeries *readImages(const char *path) unsigned short int breite; unsigned short int hoehe; char *ausgelesen = NULL; + unsigned short *anzahl_ls = malloc(sizeof(unsigned short)); + unsigned short *breite_ls = malloc(sizeof(unsigned short)); + unsigned short *hoehe_ls = malloc(sizeof(unsigned short)); + unsigned char *px_ls = NULL; ausgelesen = malloc(sizeof(char)*BUFFER_SIZE); @@ -41,7 +48,6 @@ GrayScaleImageSeries *readImages(const char *path) fclose(file); return series; } - fread(ausgelesen,sizeof(char), strlen(FILE_HEADER_STRING), file); if(strcmp(ausgelesen,FILE_HEADER_STRING)!=0){ @@ -52,23 +58,31 @@ GrayScaleImageSeries *readImages(const char *path) 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); - + if(fread(anzahl_ls,sizeof(unsigned short), 1, file)==1){ //Anzahl lesen + if (fread(breite_ls,sizeof(unsigned short), 1, file)==1){ + if (fread(hoehe_ls,sizeof(unsigned short), 1, file)==1){ + breite = breite_ls[0]; + hoehe = hoehe_ls[0]; + series = malloc(sizeof(GrayScaleImageSeries)*(1+anzahl_ls[0]+anzahl_ls[0]*breite*hoehe)); + series->count = anzahl_ls[0]; + + //printf("%d\n%d\n%d\n",series->count, breite, hoehe); + series->images = malloc(sizeof(GrayScaleImage)*series->count); + series->labels = malloc(sizeof(unsigned char)*series->count); + } + } } - ausgelesen = (char *)realloc(ausgelesen,sizeof(GrayScalePixelType)*hoehe*breite); //Speicheranpassung für Einlese-Buffer + px_ls = malloc(sizeof(GrayScalePixelType)*hoehe*breite +1); //Speicheranpassung für Einlese-Buffer for(int bildnummer=0; bildnummer count;bildnummer++){ - einzelBild(ausgelesen, file, series, breite, hoehe, bildnummer); + einzelBild(px_ls, file, series, breite, hoehe, bildnummer); } - + free(anzahl_ls); + free(breite_ls); + free(hoehe_ls); + free(px_ls); free(ausgelesen); fclose(file); return series; @@ -78,12 +92,18 @@ GrayScaleImageSeries *readImages(const char *path) 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); + if(series!=NULL){ + for(int i=0;iimages[i].height); + free(&series->images[i].width);*/ + if(series->images[i].buffer!=NULL){ + free(series->images[i].buffer); + } + } + printf("Test\n"); + free(series->labels); + free(series->images); + free(series); } - free(series->labels); - free(series->images); - free(series); + } \ No newline at end of file diff --git a/some__nn_test_file.info2 b/some__nn_test_file.info2 deleted file mode 100644 index e69de29..0000000 diff --git a/testFile.info2 b/testFile.info2 deleted file mode 100644 index 86c028a..0000000 Binary files a/testFile.info2 and /dev/null differ