Проблема с сохранением обработанного 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);
}