imageInput.c:
Verbesserungen an getInformationOfImages vorgenommen getGrayScalePixelOfImage und getLabelOfImage Tests laufen auf Fehler, müssen noch behoben werden
This commit is contained in:
parent
fc62a7cc09
commit
52e25f6fec
@ -26,17 +26,25 @@ static FILE* openImageFile(const char* path) {
|
||||
// Speicherplatz freigeben
|
||||
free(fileHeaderString);
|
||||
|
||||
if (imageFile == NULL) {
|
||||
printf("Unbekannter Fehler, imageFile ist Null");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return imageFile;
|
||||
}
|
||||
|
||||
static int getInformationOfImages(FILE* imageFile, int dimensionsOfImages[], GrayScaleImageSeries *series) {
|
||||
// Speicher für die drei Zahlen + Nullterminator (je Zahl 2 Byte)
|
||||
char bytestream[7];
|
||||
bytestream[6] = '\0';
|
||||
// Speicher für die drei Zahlen (je Zahl 2 Byte)
|
||||
unsigned char bytestream[6];
|
||||
|
||||
// Daten einlesen
|
||||
int itemsRead = fread(bytestream, 2, 3, imageFile);
|
||||
|
||||
//for (size_t i = 0; i < (itemsRead * 2); i++) {
|
||||
// printf("%02X ", bytestream[i]);
|
||||
//}
|
||||
|
||||
if (itemsRead != 3) {
|
||||
// Nicht genügend Daten gelesen
|
||||
return -1;
|
||||
@ -54,6 +62,40 @@ static int getInformationOfImages(FILE* imageFile, int dimensionsOfImages[], Gra
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int getGrayScalePixelOfImage(FILE* imageFile, GrayScaleImage* image) {
|
||||
// SPeicher für Buffer allokieren
|
||||
image->buffer = malloc(image->width * image->height * sizeof(GrayScalePixelType));
|
||||
|
||||
// Pixelwerte aus Datei auslesen
|
||||
int itemsRead = fread(image->buffer, 1, image->width * image->height * sizeof(GrayScalePixelType), imageFile);
|
||||
|
||||
if (itemsRead != image->width * image->height) {
|
||||
free(image->buffer);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned char getLabelOfImage(FILE* imageFile, GrayScaleImage* image) {
|
||||
// Array um Label zu speichern
|
||||
unsigned char *bytestream = malloc(1);
|
||||
|
||||
// Label aus Datei auslesen
|
||||
int itemsRead = fread(bytestream, 1, 1, imageFile);
|
||||
|
||||
if (itemsRead != 1) {
|
||||
free(bytestream);
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned char label = bytestream[0];
|
||||
|
||||
free(bytestream);
|
||||
|
||||
return label;
|
||||
}
|
||||
|
||||
// TODO Vervollständigen Sie die Funktion readImages unter Benutzung Ihrer Hilfsfunktionen
|
||||
GrayScaleImageSeries *readImages(const char *path)
|
||||
{
|
||||
@ -62,7 +104,7 @@ GrayScaleImageSeries *readImages(const char *path)
|
||||
FILE* imageFile = openImageFile(path);
|
||||
|
||||
if (imageFile == NULL) {
|
||||
printf("Unbekannter Fehler");
|
||||
printf("Unbekannter Fehler, imageFile ist Null");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -75,20 +117,48 @@ GrayScaleImageSeries *readImages(const char *path)
|
||||
// 2) Breite der Bilder --> width
|
||||
// 3) Höhe der Bilder --> height
|
||||
int dimensionsOfImages[2];
|
||||
getInformationOfImages(imageFile, dimensionsOfImages, series);
|
||||
int erfolg = getInformationOfImages(imageFile, dimensionsOfImages, series);
|
||||
|
||||
if (erfolg == -1) {
|
||||
printf("Unbekannter Fehler bei getInformationOfImages.");
|
||||
}
|
||||
|
||||
// Speicher für die Labels vorbereiten, wird später Bild für Bild befüllt
|
||||
series->labels = malloc(series->count * sizeof(unsigned char));
|
||||
// labels = unsigned char-Array mit der Größe wie AnzahlBilder
|
||||
|
||||
// Springe in der Datei an die Stelle nach den drei Zahlen
|
||||
if (series->labels == NULL) {
|
||||
printf("Fehler bei malloc");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (int i = 0; i < series->count; i++) {
|
||||
// image initialisieren
|
||||
GrayScaleImage *image = NULL;
|
||||
image = (GrayScaleImage *)malloc(sizeof(GrayScaleImage));
|
||||
|
||||
image->width = dimensionsOfImages[0];
|
||||
image->height = dimensionsOfImages[1];
|
||||
|
||||
if(getGrayScalePixelOfImage(imageFile, image) != 0) {
|
||||
printf("Fehler bei getGrayScalePixelOfImage");
|
||||
}
|
||||
|
||||
series->labels[i] = getLabelOfImage(imageFile, image);
|
||||
|
||||
if (series->labels[i] == -1) {
|
||||
printf("Fehler bei getLabelOfImage");
|
||||
}
|
||||
}
|
||||
|
||||
// für jedes Bild gemäß GreyScaleImageSeries.count:
|
||||
// GreyScaleImage.width = width
|
||||
// GreyScaleImage.height = height
|
||||
// GreyScaleImageSeries.buffer = Pixelwerte
|
||||
// labels = Label des Bilds
|
||||
// series.labels[i] = (unsigned char)(i % 256);
|
||||
// Springe in der Datei an die Stelle nach dem i. Bild
|
||||
|
||||
// GrayScaleImageSeries.labels = labels (mit strcpy)
|
||||
|
||||
return series;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user