Weitere Verbesserungen an imageInput.c vorgenommen. Tests schlagen weiterhin fehl
This commit is contained in:
parent
52e25f6fec
commit
6d5b19eb76
@ -12,25 +12,26 @@ static FILE* openImageFile(const char* path) {
|
|||||||
FILE* imageFile = NULL;
|
FILE* imageFile = NULL;
|
||||||
imageFile = fopen(path, "rb");
|
imageFile = fopen(path, "rb");
|
||||||
|
|
||||||
|
if (imageFile == NULL) {
|
||||||
|
// Fehler beim Öffnen
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// Prüfe, ob die Datei mit dem richtigen String beginnt
|
// Prüfe, ob die Datei mit dem richtigen String beginnt
|
||||||
char *fileHeaderString = (char*)malloc(BUFFER_SIZE);
|
char *fileHeaderString = (char*)malloc(BUFFER_SIZE);
|
||||||
fread(fileHeaderString, 1, (BUFFER_SIZE - 1), imageFile);
|
fread(fileHeaderString, 1, strlen(FILE_HEADER_STRING) + 1, imageFile);
|
||||||
|
|
||||||
if (strncmp(fileHeaderString, FILE_HEADER_STRING, 27)) {
|
if (strncmp(fileHeaderString, FILE_HEADER_STRING, 27)) {
|
||||||
// Datei hat nicht das korrekte Format
|
// Datei hat nicht das korrekte Format
|
||||||
// Speicherplatz freigeben
|
// Speicherplatz freigeben
|
||||||
free(fileHeaderString);
|
free(fileHeaderString);
|
||||||
|
fclose(imageFile);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Speicherplatz freigeben
|
// Speicherplatz freigeben
|
||||||
free(fileHeaderString);
|
free(fileHeaderString);
|
||||||
|
|
||||||
if (imageFile == NULL) {
|
|
||||||
printf("Unbekannter Fehler, imageFile ist Null");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return imageFile;
|
return imageFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,12 +65,14 @@ static int getInformationOfImages(FILE* imageFile, int dimensionsOfImages[], Gra
|
|||||||
|
|
||||||
static int getGrayScalePixelOfImage(FILE* imageFile, GrayScaleImage* image) {
|
static int getGrayScalePixelOfImage(FILE* imageFile, GrayScaleImage* image) {
|
||||||
// SPeicher für Buffer allokieren
|
// SPeicher für Buffer allokieren
|
||||||
image->buffer = malloc(image->width * image->height * sizeof(GrayScalePixelType));
|
image->buffer = malloc(image->width * image->height);
|
||||||
|
|
||||||
|
size_t expectedItems = (size_t)image->width * image->height; // Anzahl der Pixel/Bytes
|
||||||
|
|
||||||
// Pixelwerte aus Datei auslesen
|
// Pixelwerte aus Datei auslesen
|
||||||
int itemsRead = fread(image->buffer, 1, image->width * image->height * sizeof(GrayScalePixelType), imageFile);
|
int itemsRead = fread(image->buffer, sizeof(GrayScalePixelType), expectedItems, imageFile);
|
||||||
|
|
||||||
if (itemsRead != image->width * image->height) {
|
if (itemsRead != expectedItems) {
|
||||||
free(image->buffer);
|
free(image->buffer);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -77,7 +80,7 @@ static int getGrayScalePixelOfImage(FILE* imageFile, GrayScaleImage* image) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned char getLabelOfImage(FILE* imageFile, GrayScaleImage* image) {
|
static char getLabelOfImage(FILE* imageFile, GrayScaleImage* image) {
|
||||||
// Array um Label zu speichern
|
// Array um Label zu speichern
|
||||||
unsigned char *bytestream = malloc(1);
|
unsigned char *bytestream = malloc(1);
|
||||||
|
|
||||||
@ -121,6 +124,8 @@ GrayScaleImageSeries *readImages(const char *path)
|
|||||||
|
|
||||||
if (erfolg == -1) {
|
if (erfolg == -1) {
|
||||||
printf("Unbekannter Fehler bei getInformationOfImages.");
|
printf("Unbekannter Fehler bei getInformationOfImages.");
|
||||||
|
fclose(imageFile);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Speicher für die Labels vorbereiten, wird später Bild für Bild befüllt
|
// Speicher für die Labels vorbereiten, wird später Bild für Bild befüllt
|
||||||
@ -128,26 +133,54 @@ GrayScaleImageSeries *readImages(const char *path)
|
|||||||
// labels = unsigned char-Array mit der Größe wie AnzahlBilder
|
// labels = unsigned char-Array mit der Größe wie AnzahlBilder
|
||||||
|
|
||||||
if (series->labels == NULL) {
|
if (series->labels == NULL) {
|
||||||
printf("Fehler bei malloc");
|
printf("Fehler: Speicherzuweisung für labels fehlgeschlagen.\n");
|
||||||
|
free(series);
|
||||||
|
fclose(imageFile);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Speicher für das Array von GrayScaleImage-Strukturen vorbereiten
|
||||||
|
series->images = malloc(series->count * sizeof(GrayScaleImage));
|
||||||
|
if (series->images == NULL) {
|
||||||
|
printf("Fehler: Speicherzuweisung für images fehlgeschlagen.\n");
|
||||||
|
free(series->labels); // Zuerst labels freigeben
|
||||||
|
free(series);
|
||||||
|
fclose(imageFile);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < series->count; i++) {
|
for (int i = 0; i < series->count; i++) {
|
||||||
// image initialisieren
|
// image initialisieren
|
||||||
GrayScaleImage *image = NULL;
|
GrayScaleImage *image = &series->images[i];
|
||||||
image = (GrayScaleImage *)malloc(sizeof(GrayScaleImage));
|
// image = (GrayScaleImage *)malloc(sizeof(GrayScaleImage));
|
||||||
|
|
||||||
image->width = dimensionsOfImages[0];
|
image->width = dimensionsOfImages[0];
|
||||||
image->height = dimensionsOfImages[1];
|
image->height = dimensionsOfImages[1];
|
||||||
|
image->buffer = NULL;
|
||||||
|
|
||||||
|
// Graustufe-Pixel lesen und im image speichern
|
||||||
if(getGrayScalePixelOfImage(imageFile, image) != 0) {
|
if(getGrayScalePixelOfImage(imageFile, image) != 0) {
|
||||||
printf("Fehler bei getGrayScalePixelOfImage");
|
printf("Fehler: Konnte Pixel des Bildes %d nicht lesen.\n", i + 1);
|
||||||
|
fclose(imageFile);
|
||||||
|
clearSeries(series);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
series->labels[i] = getLabelOfImage(imageFile, image);
|
// label lesen und in der series an entsprechender Stelle speichern
|
||||||
|
int labelResult = getLabelOfImage(imageFile, image);
|
||||||
|
if (labelResult == -1) {
|
||||||
|
printf("Fehler: Konnte Label des Bildes %d nicht lesen.\n", i);
|
||||||
|
fclose(imageFile);
|
||||||
|
clearSeries(series);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
series->labels[i] = (unsigned char)labelResult;
|
||||||
|
|
||||||
if (series->labels[i] == -1) {
|
if (series->images == NULL) {
|
||||||
printf("Fehler bei getLabelOfImage");
|
printf("Fehler bei malloc für images");
|
||||||
|
free(series->labels); // Labels freigeben
|
||||||
|
free(series); // Serie freigeben
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,6 +192,7 @@ GrayScaleImageSeries *readImages(const char *path)
|
|||||||
// series.labels[i] = (unsigned char)(i % 256);
|
// series.labels[i] = (unsigned char)(i % 256);
|
||||||
// Springe in der Datei an die Stelle nach dem i. Bild
|
// Springe in der Datei an die Stelle nach dem i. Bild
|
||||||
|
|
||||||
|
fclose(imageFile);
|
||||||
|
|
||||||
return series;
|
return series;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user