Wie die entsprechenden structs in C++ aussehen kann man hier gut sehen:
http://tipsandtricks.runicsoft.com/Cpp/BitmapTutorial.html (findet man so auch in den windows headern)
Ansonsten kann man über die einzelnen Attribute hier viel finden:
http://de.wikipedia.org/wiki/Windows_Bitmap
Im Prinzip brauchst du biBitCount=8, aber dann wird eine Farbtabelle gefordert. Du kannst entweder dein 1 Byte array Element für Element in ein 24bit oder 32bit Farbpixel umwandeln, oder du schreibst halt einfach eine entsprechende Farbtabelle. Das ganze wird also quasi zu
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
|
BITMAPFILEHEADER bmpheader;
BITMAPINFOHEADER bmpinfo;
//hier bitte die korrekten Werte für header und info setzen; u.a. biBitCount=8
file.write((char*)&bmpheader,sizeof(bmpheader));
file.write((char*)&bmpinfo,sizeof(bmpinfo));
for(unsigned int counter = 0; counter < 256;counter++) // 2^8 mögliche farben => farbtabelle als 32 bit farben (BGR0 format)
{
unsigned int color = (counter << 24) | (counter << 16) | (counter << 8);//graufarbe mit B=counter, G=counter, R=counter
file.write((char*)&color,sizeof(color);
}
file.write((char*)imgdata,imgdata_size);
|
Wenn einem egal ist, welche Farbe am Ende angezeigt wird kann man auch direkt etwas in Richtung
"for(unsigned int counter = 0; counter < 256;counter++) file.write((char*)&counter,sizeof(counter);" nutzen, wobei ggf noch ein Byteshift notwendig sein könnte (bin ich mir gerade nicht so sicher, ob man sonst nicht in den "0" Teil von BGR0 schreiben würde).