Verbesserungen aus der Stunde
This commit is contained in:
parent
98e0fb1ec5
commit
b7d56d1cb4
72
imageInput.c
72
imageInput.c
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user