Проблема с сохранением обработанного bmp изображения в файл на языке Си

В программе происходит чтение, обработка и запись bmp-изображения в новый файл. Функция add_red увеличивает красные компоненты у всех пикселей. Проблема в том, что изображение при этом повреждается и не открывается. Размер картинки в байтах остается прежним, также я попробовал восстановить поврежденный файл с помощью онлайн-инструмента и он восстановился правильно с учетом изменения цвета. Если же никак не обрабатывать картинку, то чтение и запись в новый файл, т.е создание копии, происходят успешно.

void write_bmp(char file_name[], Pixel **arr, int H, int W, BitmapFileHeader bmfh, BitmapInfoHeader bmif)

{ 

    FILE *ff = fopen(file_name, "wb"); 
    fwrite(&bmfh, 1, sizeof(BitmapFileHeader), ff); 
    fwrite(&bmif, 1, sizeof(BitmapInfoHeader), ff); 
    for(int i = 0; i < H; i++)
    { 
        fwrite(arr[i], 1, W * sizeof(Pixel) + (W * 3) % 4, ff); 
    } 
    fclose(ff); 
}

Pixel **add_red(Pixel **arr, int H, int W)

{ 

 for(int i = 0; i < H; i++)

{ 

 for(int j = 0; j < W; j++)

{ 

 arr[i][j].R=250; 

 }
 
 }
 
 return arr; 

}
 
void FreeMemory(Pixel** arr, size_t H)
{

    for(int i=0;i<H;i++){
        free(arr[i]);
    }
    free(arr);
}

int main()
{

    char file_name[]="RG.bmp";
    char new_file_name[]="GR.bmp";
    BitmapFileHeader* bmfh=malloc(sizeof(BitmapFileHeader));
    BitmapInfoHeader* bif=malloc(sizeof(BitmapInfoHeader));
    print_file_header(*bmfh);
    print_info_header(*bif);
    Pixel** image=read_bmp(file_name, bmfh,bif);
    print_file_header(*bmfh);
    print_info_header(*bif);
    image=add_red(image, bif->height, bif->width);
    write_bmp(new_file_name,image,bif->height,bif->width,*bmfh,*bif);
    FreeMemory(image, bif->height);
    free(bmfh);
    free(bif);
    
}

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