Witam.
Jestem dość początkującym programistą i chciałem zapisać dane jako bitmapę do pliku.
Do zapisu danych nagłówkowych używam fwrite, jak widać. Plik tworzy się w folderze, ma rozmiary takie same jak obrazek o identycznych parametrach, lecz w właściwościach pliku nie widnieją żadne wartości.
FILE *w = fopen("obrazek — kopia.bmp","wb");
if(w==NULL)
{
cout<<"Plik nie został otwarty"<<endl;
exit (0);
}
cout<<"Plik został otwarty pomyślnie"<<endl;
////////////////////////////////////
fseek(w,0x0000,SEEK_SET);
fputc(FH.bfType[0],w); //pole identyfikacji -"BM"
fputc(FH.bfType[1],w);
fseek(w,0x0002,SEEK_SET);
fwrite(&FH.bfSize,1,sizeof( int),w); //rozmiar pliku BMP
fseek(w,0x0006,SEEK_SET);
fwrite(&FH.bfReserved1,1,sizeof(short int),w); //ponoć zawsze ma być 0
fseek(w,0x0008,SEEK_SET);
fwrite(&FH.bfReserved2,1,sizeof(short int),w); //ponoć zawsze ma być 0
fseek(w,0x000A,SEEK_SET);
fwrite(&PROP.BMPDataLocation,1,sizeof(unsigned int),w);//offset rozpoczęcia danych z kolorami
fseek(w,0x0012,SEEK_SET);
fwrite(&PROP.BMPHeight,1,sizeof(unsigned int),w);//wysokosc -256
fseek(w,0x0016,SEEK_SET);
fwrite(&PROP.BMPWidth,1,sizeof(unsigned int),w);//szerokosc -256
fseek(w,0x001A,SEEK_SET);
fwrite(&PROP.NumColorPlanes,1,sizeof(short int),w);//ilosc planow z kolorami -0
fseek(w,0x001C,SEEK_SET);
fwrite(&PROP.bitsPerPixel,1,sizeof(short int),w);//rozdzielczosc kolorow pixela - 24
fseek(w,0x001E,SEEK_SET);
fwrite(&PROP.CompresionMode,1,sizeof(unsigned int),w);//kompresja -0
fseek(w,0x0022,SEEK_SET);
fwrite(&PROP.BMPDataSize,1,sizeof(unsigned int),w);//rozmiar danych -196608
fseek(w,0x0026,SEEK_SET);
fwrite(&PROP.HORIZONTAL,1,sizeof(unsigned int),w);
fseek(w,0x002A,SEEK_SET);
fwrite(&PROP.VERTICAL,1,sizeof(unsigned int),w);
fseek(w,0x002E,SEEK_SET);
fwrite(&PROP.NumColorPlanes,1,sizeof(unsigned int),w); //-0
fseek(w,0x0032,SEEK_SET);
fwrite(&PROP.COLOURUSED,1,sizeof(unsigned int),w);//czy kazdy kolor jest wazny -0
fseek(w,0x0036,SEEK_SET); //offset na dane z miejsce danych z kolorami
for(int i=0;i<PROP.BMPHeight*PROP.BMPWidth*3;i++){
fputc(ALL.BMP_All[i],w);}
fclose(w);
Tutaj pytania:
Czy ta metoda(fwrite) nie jest zła i nie należy jej porzucić? Wiem, że funkcja fwrite sama ustawia offset lecz przez "niedziałanie" pomyślałem, że nie wpisuje danych tam gdzie trzeba.
Czy ktoś może mi podpowiedzieć gdzie tkwi błąd?