#include #include #include #include "imageInput.h" #define BUFFER_SIZE 100 #define FILE_HEADER_STRING "__info2_image_file_format__" #define FILE_HEADER_SIZE (sizeof(FILE_HEADER_STRING)-1) // TODO Implementieren Sie geeignete Hilfsfunktionen für das Lesen der Bildserie aus einer Datei FILE *checkFile(const char *path) { FILE *datei = fopen(path,"rb"); if (datei == NULL) { perror("Datei konnte nicht geoeffnet werden"); return NULL; } char buffer[FILE_HEADER_SIZE+1]; if (fread(buffer,1,FILE_HEADER_SIZE,datei)!=FILE_HEADER_SIZE) { perror("Header konnte nicht eingelessen werden"); fclose(datei); return NULL; } buffer[FILE_HEADER_SIZE] = '\0'; if (strcmp(buffer,FILE_HEADER_STRING)!=0) { printf("Falscher Dateikopf"); //printf("\n%s",buffer); //printf("\n%s",FILE_HEADER_STRING); //printf("\n%d",strcmp(buffer,FILE_HEADER_STRING)); fclose(datei); return NULL; } return datei; } // TODO Vervollständigen Sie die Funktion readImages unter Benutzung Ihrer Hilfsfunktionen GrayScaleImageSeries *readImages(const char *path) { FILE *datei = checkFile(path); if (datei==NULL) { return NULL; } unsigned short image_count, width, height; fread(&image_count,sizeof(unsigned short),1,datei); fread(&width,sizeof(unsigned short),1,datei); fread(&height,sizeof(unsigned short),1,datei); //printf("%u Bilder und %u mal %u",image_count,width,height); GrayScaleImageSeries *series = NULL; series = malloc(sizeof(GrayScaleImageSeries)); series->count = image_count; series->images = malloc(image_count*sizeof(GrayScaleImage)); series->labels = malloc(image_count*sizeof(unsigned char)); for(unsigned short i = 0;iimages[i].width = width; series->images[i].height = height; series->images[i].buffer = malloc(width*height); } for(unsigned short i = 0;iimages[i].buffer[j],1,1,datei); } fread(&series->labels[i],1,1,datei); //printf("%d\n",series->labels[i]); } fclose(datei); return series; } // TODO Vervollständigen Sie die Funktion clearSeries, welche eine Bildserie vollständig aus dem Speicher freigibt void clearSeries(GrayScaleImageSeries *series) { if(series == NULL) { printf("Serie nicht vorhanden\n"); return; } unsigned short anzahl = series->count; for(unsigned short i = 0;iimages[i].buffer ); } free(series->images); free(series->labels); free(series); printf("Serie freigegeben\n"); return; }