Files

42 lines
992 B
C
Raw Permalink Normal View History

2018-10-07 00:34:59 -04:00
#include "bmp.h"
#include "kmalloc.h"
2018-10-07 00:34:59 -04:00
#include <stdio.h>
#include <errno.h>
2018-10-07 00:34:59 -04:00
uint8_t *bmp_read_image(const char *filename, bmp_info_header_t *bmp_info_header) {
FILE *bmp_file;
bmp_file_header_t header;
uint8_t *img_data;
2018-10-07 00:34:59 -04:00
bmp_file = fopen(filename, "r");
if (ferror(bmp_file))
2018-10-07 00:34:59 -04:00
return NULL;
fread(&header, sizeof(bmp_file_header_t), 1, bmp_file);
if (ferror(bmp_file) || header.type != 0x4D42) {
fclose(bmp_file);
2018-10-07 00:34:59 -04:00
return NULL;
}
fread(bmp_info_header, sizeof(bmp_info_header_t), 1, bmp_file);
fseek(bmp_file, header.img_data_offset, SEEK_SET);
2018-10-07 00:34:59 -04:00
img_data = kmalloc(bmp_info_header->img_data_size);
if (img_data == NULL) {
errno = ENOMEM;
kfree(img_data);
fclose(bmp_file);
2018-10-07 00:34:59 -04:00
return NULL;
}
fread(img_data, bmp_info_header->img_data_size, 1, bmp_file);
if (ferror(bmp_file)) {
fclose(bmp_file);
2018-10-07 00:34:59 -04:00
return NULL;
}
fclose(bmp_file);
return img_data;
2018-10-07 00:34:59 -04:00
}