000
05.04.2005, 15:29 Uhr
pippo
|
Hab mir ne Header-Datei angelegt, die wie folgt aussieht:
C++: |
#pragma pack(1) struct bmInfoHeader { long biSize; // Laenge des Info Header long biWidth; // * Anzahl Pixel horizontal long biHeight; // * Anzahl Pixel vertikal short biPlanes; // muss eine 1 enthalten short biBitCount; // Anzahl Bits je Pixel, hier: 8 long biCompression; // hier: nicht komprimiert long biSizeImage; // Anzahl der Bytes fuer das Bild long biXPelsPerMeter; // hor. Aufloesung in Pixel/Meter long biYPelsPerMeter; // vert. Aufloesung in Pixel/Meter long biClrUsed; // Anzahl tatsaechlich benutzter Farben (0) long biClrImportant; // Anzahl unbedingt benoetigter Farben (0) };
struct bmFileHeader { // (includiert bmInfoHeader) char bfType1, bfType2; // dort steht 'B' 'M' long bfSize; // Dateilaenge short bfReserved1; short bfReserved2; long bfOffBits; // * Abstand zum Beginn der Bilddaten bmInfoHeader bmInfo; // der Info Header schliesst an }; #pragma pack ()
|
Ausschnitt aus dem Programm:
C++: |
... ifstream Original("template.bmp", ios::binary | ios::in); ofstream Koch("Koch-Kurve.bmp", ios::binary | ios::out);
bmInfoHeader bIH; bmFileHeader bFH;
// MAIN PROGRAM *************************************************************** int main() { char * Header = new char[sizeof(bmFileHeader)]; long Breite = bIH.biWidth, Hoehe = bIH.biHeight, Position; ... }
|
Wieso wird aber Breite und Hoehe auf 0 gesetzt? Muss man das ganze noch mit der Originaldatei verbinden? Dachte da wird automatisch die zum lesen geöffnete Datei genommen.
Was mich noch etwas verwundert: An der Position 10 steht als 4-Byte-Wert (1024) die Länge des Headers, bzw. die Position der Bilddaten. Jedoch beginnen die Pixel erst bei 1078. Was steht nun in den 54Bytes dazwischen? Konnte hierzu bisher nichts finden, obwohl ich mir schon einige Seite über den Aufbau einer .bmp durchgelesen hab Dieser Post wurde am 05.04.2005 um 15:29 Uhr von pippo editiert. |