Считывание файла 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 выдаёт только ошибку о том что файл не найден, хотя находится в той же папке. Заранее спасибо


Ответы (0 шт):