Считывание файла BMP
Задача состоит в том что бы считать файл BMP, потом изменять его свойства. Возникла проблема на моменте считывания.
#include <stdint.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include "bmp.h"
struct bmp_header* read_bmp_header(FILE* stream){
if (stream == NULL)
return NULL;
struct bmp_header *Header = ( struct bmp_header *)malloc(sizeof(struct bmp_header));
memset(&Header, 0, sizeof(Header));
fread(&Header->type, 2, 1, stream);
fread(&Header->size, 4, 1, stream);
fread(&Header->reserved1, 2, 1, stream);
fread(&Header->reserved2, 2, 1, stream);
fread(&Header->offset, 4, 1, stream);
fread(&Header->dib_size, 4, 1, stream);
fread(&Header->width, 4, 1, stream);
fread(&Header->height, 4, 1, stream);
fread(&Header->planes, 2, 1, stream);
fread(&Header->bpp, 2, 1, stream);
fread(&Header->compression, 4, 1, stream);
fread(&Header->image_size, 4, 1, stream);
fread(&Header->x_ppm, 4, 1, stream);
fread(&Header->y_ppm, 4, 1, stream);
fread(&Header->num_colors, 4, 1, stream);
fread(&Header->important_colors, 4, 1, stream);
return Header;
}
int main(int argc, char const *argv[]) {
FILE* stream = fopen("sabouter.bmp", "rb");
if(stream == 0){
printf("Error opening file\n" );
return 0;
}
struct bmp_header *bmp_file = NULL;
bmp_file = read_bmp_header(stream);
printf("\nType:%hd\n", bmp_file->type);
printf("Size:%ld\n", bmp_file->size);
fclose(stream);
return 0;
}
Сама структура в которую я записываю данные имеет следующий вид:
struct bmp_header{
uint16_t type; // "BM" (0x42, 0x4D)
uint32_t size; // file size
uint16_t reserved1; // not used (0)
uint16_t reserved2; // not used (0)
uint32_t offset; // offset to image data (54b)
uint32_t dib_size; // DIB header size (40b)
uint32_t width; // width in pixels
uint32_t height; // height in pixels
uint16_t planes; // 1
uint16_t bpp; // bits per pixel (1/4/8/24)
uint32_t compression; // compression type (0/1/2) 0
uint32_t image_size; // size of picture in bytes, 0
uint32_t x_ppm; // X Pixels per meter (0)
uint32_t y_ppm; // X Pixels per meter (0)
uint32_t num_colors; // number of colors (0)
uint32_t important_colors; // important colors (0)
} __attribute__((__packed__));
При запуске получаю Segmentation fault. Через gdb выдаёт только ошибку о том что файл не найден, хотя находится в той же папке. Заранее спасибо