Инвертирование цветов в 1-битном BMP-файле размером 32x32

Все вопросы можно задавать по адресу staroverovvl@yandex.ru
В программе считывается BMP-файл, имя которого задается в командной строке, цвета изобажения инвертируются и измененный файл записывается в файл с именем t.bmp. Далее файл t.bmp копируется обратно в файл с заданным именем.

//Данный include требуется только в Microsoft Visual Studio:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#pragma warning (disable:4996)//запрещает излишние замечания

int _tmain(int argc, _TCHAR* argv[])
{
char c;int i,j;unsigned long ptr;
 FILE *f,*f2;
 unsigned char ss[4];
 if(argc!=2){printf("Call:\nBMP FileName\n");return -1;}
 f=fopen(argv[1],"rb");f2=fopen("t.bmp","wb"); //Читаем из фала с именем из командной строки и записываем в файл t.bmp
 if(f==NULL){printf("Can't open file\n");return -1;}
 //--
 for(i=0;i<10;i++){fread(&c,1,1,f);fwrite(&c,1,1,f2);}   //читаем 10 байт
 fread(&ptr,sizeof(ptr),1,f);fwrite(&ptr,sizeof(ptr),1,f2);//читаем смещение к данным картинки
 for(i=0;i<(int)(ptr-10-sizeof(ptr));i++)                //читаем оставшиеся байты до картинки
  {fread(&c,1,1,f);fwrite(&c,1,1,f2);}
 for(i=0;i<32;i++)//читаем строки изображения и инвертируем цвета:                                       
 {
  fread(ss,sizeof(ss),1,f);//32 пиксела по 1 биту на пиксел должны размещаться в 4 байтах
  {
   for(j=0;j<4;j++)
    ss[j]=~ss[j];
  }
  fwrite(ss,sizeof(ss),1,f2);
 }
 //--
 fclose(f);fclose(f2);
 //-- Копируем t.bmp в обрабатываемый файл:
 f=fopen(argv[1],"wb");f2=fopen("t.bmp","rb");
  while(fread(&c,1,1,f2)==1)fwrite(&c,1,1,f);
 fclose(f);fclose(f2);
 //--
return 0;
}