Verbesserungen aus der Stunde

This commit is contained in:
AD005\z004z3ez 2025-11-20 11:05:32 +01:00
parent 98e0fb1ec5
commit b7d56d1cb4

View File

@ -17,36 +17,21 @@ static FILE *openImageFile(const char *path)
}
static int ReadCheckHeader(FILE *fp, GrayScalePixelType *header)
static int ReadCheckHeader(FILE *fp)
{
if(fread(header, sizeof(GrayScalePixelType), HEADER_LEN, fp) != HEADER_LEN)
{
return 0;
}
return 1;
}
static int checkHeader(const GrayScalePixelType *buffer) // mit in die readcheckheader funkiton rein, feste buffergröße, char statt grayscalepixeltype weil ja nur ein string überprüft wird und dann mit strncpy arbeiten
{
int ok = 0;
char header[HEADER_LEN + 1]; //Array mit Platz für Header Länge + \0 Character -> String
// Jeder Byte in String kopieren
for(int i = 0; i < HEADER_LEN; i++){ //geht aber auch memcpy
header[i] = buffer[i];
}
if(fread(header, 1, HEADER_LEN, fp) != HEADER_LEN)
return 0;
header[HEADER_LEN] = '\0'; // Nullterminator am Ende anhängen
if(strcmp(header, FILE_HEADER_STRING) == 0) // wenn beide identische sind gibt cmp 0 zurück
return ok = 1;
else
return ok = 0;
if(strcmp(header, FILE_HEADER_STRING) != 0) // wenn beide identische sind gibt cmp 0 zurück
return 0;
return 1;
}
static int readMetaData(FILE *fp, unsigned short *numImages, unsigned short *width, unsigned short *height)
@ -74,15 +59,12 @@ static int checkDimensions(unsigned int width, unsigned int height)
}
static GrayScaleImageSeries *allocateSeriesStruct(void)
static GrayScaleImageSeries *allocateSeriesStruct(unsigned int numImages)
{
GrayScaleImageSeries *series = malloc(sizeof(GrayScaleImageSeries));
return series;
}
if(!series)
return NULL;
static int AllocateCheckImageAndLabels(GrayScaleImageSeries *series, unsigned int numImages)
{
series->count = numImages;
//Speicher für die Pointer an sich belegen
series->images = malloc(numImages * sizeof(GrayScaleImage)); //Speicher für alle Bild-Strukturen, nicht aber für die Pixel selbst (denn image ist nochmal ein Array selbst)
@ -94,14 +76,15 @@ static int AllocateCheckImageAndLabels(GrayScaleImageSeries *series, unsigned in
free(series->images); //wenn trotzdem was reingeschrieben wurde, dann freigeben
free(series->labels);
free(series);
return 0;
return NULL;
}
return 1;
return series;
}
static int AllocateCheckPixelData(GrayScaleImageSeries *series, unsigned int numImages, unsigned int width, unsigned int height)
{
for(unsigned int i = 0; i < numImages; i++){
@ -165,24 +148,17 @@ GrayScaleImageSeries *readImages(const char *path)//funktionsnamen immer klein a
return NULL;
//Buffer zum Einlesen des Headers
GrayScalePixelType header[HEADER_LEN]; //nicht grayscalepixeltype sonder char
char header[HEADER_LEN];
//Prüfen, ob genau die HEADER_LEN Bytes eingelesen werden
if(!ReadCheckHeader(fp, header)){
fclose(fp);
return NULL;
}
//Prüfen, ob es sich um den korrekten Header handelt mit Hilfsfunktion
if(!checkHeader(header)){ //mit in readCheckHeader
if(!ReadCheckHeader(fp)){
fclose(fp);
return NULL;
}
//Anzahl der Bilder, Breite und Höhe einlesen
unsigned short numImages, width, height;
if(!readMetaData(fp, &numImages, &width, &height)){
@ -202,21 +178,13 @@ GrayScaleImageSeries *readImages(const char *path)//funktionsnamen immer klein a
}
//Speicher für die gesamte Bildserie reservieren (aber nur für die Struktur)
series = allocateSeriesStruct();
series = allocateSeriesStruct(numImages);
if(!series) {
fclose(fp);
return NULL; //Fehler bei Speicherreservierung
}
//Speicher für die Bild-Struktur und Label-Array reservieren und prüfen
if(!AllocateCheckImageAndLabels(series, numImages)){
fclose(fp);
return NULL;
}
//Speicher für die Pixeldaten selbst reserviern und prüfen, ob er reserviert werden konnte