#include #include #include #include "imageInput.h" #define BUFFER_SIZE 100 #define FILE_HEADER_STRING "__info2_image_file_format__" // Funktionen müssen noch auf Teilfunktionen // übersichtlich aufgeteilt werden! // TODO Implementieren Sie geeignete Hilfsfunktionen für das Lesen der Bildserie aus einer Datei //void setupMemory(); unsigned int readStatusInfo(FILE *source, char *const headerString, unsigned int *const imageCount, unsigned int *const imageWidth, unsigned int *const imageHeight, int const amountToRead); void readImagedata(FILE *source, unsigned char *const imageBuffer, unsigned char *const labelBuffer,int const imageCount ,int const amountToRead); // TODO Vervollständigen Sie die Funktion readImages unter Benutzung Ihrer Hilfsfunktionen GrayScaleImageSeries *readImages(const char *path) { GrayScaleImageSeries *series = NULL; // selbst geschriebene Variablen FILE *readSource; unsigned int numberOfBytesToRead = 0; const unsigned int amountOfStatusInfoToRead = 1; char headerString[sizeof("__info2_image_file_format__\0")] = ""; //speicher allocaten weil *series auf null zeigt !!!!!!!! readSource = fopen(path, "rb"); if (readSource != NULL) { series = calloc(sizeof(GrayScaleImageSeries), amountOfStatusInfoToRead); series->images = calloc(sizeof(GrayScaleImage), amountOfStatusInfoToRead); numberOfBytesToRead = readStatusInfo(readSource, headerString, &(series->count), &(series->images->width), &(series->images->height), amountOfStatusInfoToRead); series->images->buffer = calloc((series->count) * numberOfBytesToRead, sizeof(GrayScalePixelType)); series->labels = calloc((series->count), sizeof(&(series->labels))); readImagedata(readSource, series->images->buffer, series->labels, series->count, numberOfBytesToRead); } fclose(readSource); return series; } // TODO Vervollständigen Sie die Funktion clearSeries, welche eine Bildserie vollständig aus dem Speicher freigibt void clearSeries(GrayScaleImageSeries *series) { int i = 0; // Write NULL into all memory spaces for (i = 0; i < ((series->count) * (series->images->width) * (series->images->height)); i++) { *(series->images->buffer + i * (series->images->width) * (series->images->height)) = '\0'; } for (i = 0; i < (series->count); i++) { *(series->labels + i) = '\0'; } series->count = 0; series->images->width = 0; series->images->height = 0; // Closse all allocated memory // AND write NULL into every pointer // so they can't be accessed free(series->images->buffer); free(series->labels); series->images->buffer = NULL; series->images = NULL; series->labels = NULL; free(series); series = NULL; } // reads string, pictureCount, pictureWidth, pictureHight unsigned int readStatusInfo(FILE *source, char *const headerString, unsigned int *const imageCount, unsigned int *const imageWidth, unsigned int *const imageHeight, int const amountToRead) { unsigned int bytesToRead = 0; int numred = 0; int numred2 = 0; int numred3 = 0; int numred4 = 0; *imageCount = 0; *imageWidth = 0; *imageHeight = 0; numred = fread(headerString, sizeof("__info2_image_file_format__\0"), 1, source); numred2 = fread(imageCount, sizeof(unsigned int), 1, source); numred3 = fread(imageWidth, sizeof(unsigned int), 1, source); numred4 = fread(imageHeight, sizeof(unsigned int), 1, source); *imageCount = 2; bytesToRead = (*imageWidth) * (*imageHeight); printf("hier\n"); printf("numred: %d\n", numred); printf("stringsize: %lld\n", sizeof("__info2_image_file_format__")); printf("string: %send\n", headerString); printf("numred2: %d\n", numred2); printf("count: %u\n", *imageCount); printf("numred3: %d\n", numred3); printf("width: %u\n", *imageWidth); printf("numred4: %d\n", numred4); printf("height %u\n", *imageHeight); printf("bytes to read = %u\n", bytesToRead); return bytesToRead; } // reads the imagebytes and the label of all images void readImagedata(FILE *source, unsigned char *const imageBuffer, unsigned char *const labelBuffer,int const imageCount , int const amountOfBytes) { int i = 0; for (i = 0; i <= imageCount; i++) { fread((imageBuffer + i * amountOfBytes), sizeof(&(imageBuffer)), amountOfBytes, source); fread((labelBuffer + i), sizeof(&(labelBuffer)), 1, source); } }