Witam.
Chciałbym napisać program który za pomocą ifstream odczyta bitmapę monochromatyczna i zapisze dane o niej do pliku txt.
Jak dotąd napisałem program który odczytuje nagłówek bitmapy ale źle odczytuje właściwy obrazek.
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream plik("trk2.bmp", ios::binary);
ofstream save("trk2.txt");
if(!plik){
cout <<"Nie mozna otworzyc pliku. \n";
return -1;
}
short bfType;
int bfSize;
short bfReserved1;
short bfReserved2;
int bfOffBits;
int biSize;
int biWidth;
int biHeight;
short biPlanes;
short biBitCount;
int biCompression;
int biSizeImage;
int biXPelsPerMeter;
int biYPelsPerMeter;
int biClrUsed;
char biClrImportant[1];
char biClrRotation[1];
short biReserved;
plik.read((char*)&bfType, sizeof(short));
plik.read((char*)&bfSize, sizeof(int));
plik.read((char*)&bfReserved1, sizeof(short));
plik.read((char*)&bfReserved2, sizeof(short));
plik.read((char*)&bfOffBits, sizeof(int));
plik.read((char*)&biSize, sizeof(int));
plik.read((char*)&biWidth, sizeof(int));
plik.read((char*)&biHeight, sizeof(int));
plik.read((char*)&biPlanes, sizeof(short));
plik.read((char*)&biBitCount, sizeof(short));
plik.read((char*)&biCompression, sizeof(int));
plik.read((char*)&biSizeImage, sizeof(int));
plik.read((char*)&biXPelsPerMeter, sizeof(int));
plik.read((char*)&biYPelsPerMeter, sizeof(int));
plik.read((char*)&biClrUsed, sizeof(int));
plik.read(biClrImportant,1);
plik.read(biClrRotation,1);
plik.read((char*)&biReserved, sizeof(short));
int a=biWidth*biHeight*2;
int pi[a];
plik.read((char*)pi, sizeof(a));
save<<"bfType: "<<bfType<<endl;
save<<"bfSize: "<<bfSize<<endl;
save<<"bfReserved1: "<<bfReserved1<<endl;
save<<"bfReserved2: "<<bfReserved2<<endl;
save<<"bfOffBits: "<<bfOffBits<<endl;
save<<"biSize: "<<biSize<<endl;
save<<"biWidth: "<<biWidth<<endl;
save<<"biHeight: "<<biHeight<<endl;
save<<"biPlanes: "<<biPlanes<<endl;
save<<"biBitCount: "<<biBitCount<<endl;
save<<"biCompression: "<<biCompression<<endl;
save<<"biSizeImage: "<<biSizeImage<<endl;
save<<"biXPelsPerMeter: "<<biXPelsPerMeter<<endl;
save<<"biYPelsPerMeter: "<<biYPelsPerMeter<<endl;
save<<"biClrUsed: "<<biClrUsed<<endl;
save<<"biClrImportant: "<<biClrImportant<<endl;
save<<"biClrRotation: "<<biClrRotation<<endl;
save<<"biReserved: "<<biReserved<<endl;
for (int x=0; x<a; x++)
save<<pi[x]<<endl;
system("PAUSE");
return 0;
}
Przykładowe odczytanie bitmapy monochromatycznej za pomocą tego programu o wielkości 2x2, z czego są 4 białe piksele:
bfType: 19778
bfSize: 70
bfReserved1: 0
bfReserved2: 0
bfOffBits: 62
biSize: 40
biWidth: 2
biHeight: 2
biPlanes: 1
biBitCount: 1
biCompression: 0
biSizeImage: 8
biXPelsPerMeter: 0
biYPelsPerMeter: 0
biClrUsed: 0
biClrImportant:
biClrRotation:
biReserved: 0
0
4248912
2292888
16384
2088763392
2088810217
0
4200280
Proszę o pomoc i z góry dziękuję.