generated from freudenreichan/info2Praktikum-NeuronalesNetz
93 lines
2.6 KiB
C
93 lines
2.6 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include "imageInput.h"
|
|
|
|
#define BUFFER_SIZE 100
|
|
#define FILE_HEADER_STRING "__info2_image_file_format__"
|
|
|
|
// TODO Implementieren Sie geeignete Hilfsfunktionen für das Lesen der Bildserie aus einer Datei
|
|
static unsigned short readNumberOfImages(FILE *file)
|
|
{
|
|
unsigned short numberOfImages = 0;
|
|
fseek(file, strlen(FILE_HEADER_STRING), SEEK_SET);
|
|
fread(&numberOfImages, sizeof(unsigned short), 1, file);
|
|
return numberOfImages;
|
|
}
|
|
|
|
static unsigned short readImageWidth(FILE *file)
|
|
{
|
|
unsigned short ImageWidth = 0;
|
|
fseek(file, sizeof(unsigned short), SEEK_CUR);
|
|
fread(&ImageWidth, sizeof(unsigned short), 1, file);
|
|
|
|
return ImageWidth;
|
|
}
|
|
|
|
static unsigned short readImageHeight(FILE *file)
|
|
{
|
|
unsigned short ImageHeight = 0;
|
|
fseek(file, sizeof(unsigned short), SEEK_CUR);
|
|
fread(&ImageHeight, sizeof(unsigned short), 1, file);
|
|
return ImageHeight;
|
|
}
|
|
|
|
static GrayScalePixelType *readImage(FILE *file, unsigned short ImageWidth, unsigned short ImageHeight)
|
|
{
|
|
GrayScalePixelType *image = malloc(ImageHeight*ImageWidth*sizeof(GrayScalePixelType));
|
|
fseek(file, sizeof(unsigned short), SEEK_CUR);
|
|
fread(image, sizeof(char), ImageHeight*ImageWidth, file);
|
|
return image;
|
|
|
|
}
|
|
|
|
static GrayScalePixelType readLabel(FILE *file)
|
|
{
|
|
unsigned char label;
|
|
fseek(file, sizeof(unsigned short), SEEK_CUR);
|
|
fread(&label, sizeof(unsigned char), 1, file);
|
|
return label;
|
|
}
|
|
|
|
|
|
// TODO Vervollständigen Sie die Funktion readImages unter Benutzung Ihrer Hilfsfunktionen
|
|
GrayScaleImageSeries *readImages(const char *path)
|
|
{
|
|
FILE *file = fopen(path, "rb");
|
|
if (file == NULL)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
unsigned short numberOfImages = readNumberOfImages(file);
|
|
unsigned short imageWidth = readImageWidth(file);
|
|
unsigned short imageHeight = readImageHeight(file);
|
|
|
|
GrayScaleImageSeries *series = malloc(sizeof(GrayScaleImageSeries));
|
|
if(series == NULL)
|
|
{
|
|
fclose(file);
|
|
return NULL;
|
|
}
|
|
|
|
series->count = numberOfImages;
|
|
series->images = malloc(numberOfImages * sizeof(GrayScaleImage));
|
|
series->labels = malloc(numberOfImages * sizeof(unsigned char));
|
|
|
|
|
|
for(int i = 0; i < numberOfImages; i++)
|
|
{
|
|
series->images[i].width = imageWidth;
|
|
series->images[i].height = imageHeight;
|
|
series->images[i].buffer = readImage(file, imageWidth, imageHeight);
|
|
series->labels[i] = readLabel(file);
|
|
}
|
|
|
|
fclose(file);
|
|
return series;
|
|
}
|
|
|
|
// TODO Vervollständigen Sie die Funktion clearSeries, welche eine Bildserie vollständig aus dem Speicher freigibt
|
|
void clearSeries(GrayScaleImageSeries *series)
|
|
{
|
|
} |