Als erstes: die Formatinformationen findet ihr hier:
http://www.wotsit.org/search.asp?s=graphics
damit sieht ein einfaches BMP Bild so aus:
bitmapfileheader
bitmapinfoheader
rgbquad aka Palette
Bilddaten
Um das ganze einfach zu gestalten: 24bit Farben -> keine Palette; unkomprimiert -> einfache Bilddaten
Ich werde auch nicht darauf eingehen wie Dateien gespeichert werden - ich kann das nicht (bin eigentlich Smalltalk/Java/Perl Programmierer).
Der bitmapfileheader:
Code:
typedef struct tagBITMAPFILEHEADER {
UINT bfType; //Typ - muss BM=19778 sein
DWORD bfSize; //Größe der Datei in Bytes
UINT bfReserved1; //muss 0 sein
UINT bfReserved2; //muss 0 sein
DWORD bfOffBits; //Start der Bitmapdaten als offset von der BITMAPFILEHEADER Struktur
} BITMAPFILEHEADER;
der bitmapinfoheader:
Code:
typedef struct tagBITMAPINFOHEADER {
DWORD biSize; //größe der Bitmapinfo struct in bytes
LONG biWidth; //breite des Bitmap in pixel
LONG biHeight; //höhe des Bitmap in pixel
WORD biPlanes; //muss 1 sein
WORD biBitCount; //hier 24
DWORD biCompression; //hier BI_RGB=0
DWORD biSizeImage; //größe des Bildes in Bytes, kann wenn ohne Kompression auch 0 sein
LONG biXPelsPerMeter; //pixel pro meter ->unwichtig
LONG biyPelsPerMeter; //s.o.
DWORD biClrUsed; //hier 0
DWORD biClrImportant; //hier auch 0
} BITMAPINFOHEADER
Palette sollte nicht vorhanden sein - da 24 bit - aber das müsstet ihr noch mit nem Hex-Editor und einem 24bit Bitmap überprüfen.
Dann folgen Zeilenweise die Pixeldaten - je ein Byte pro Farbwert in der Reihenfolge Rot, Grün, Blau - insgesamt 3 Byte pro Pixel.
So, das war's auch schon. Viel Spaß damit.
P.S.: Das ganze hat mich jetzt 15 min und 1 Googleaufruf gekostet. Also merkt euch: Google ist euer Freund.
Schnappt euch eine Beschreibung des Formats, nehmt euch einen Hexeditor und öffnet ein BMP. Schreibt die Werte raus, ordnet sie den Headerstrukturen zu damit ihr das Format versteht. Dann könnt ihr das ganze auch recht einfach in eine Datei schreiben. BMP ist einfach.