Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Header einer Bitmap auslesen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.04.2005, 17:52 Uhr
~Gast
Gast


Hy!

Bin mir nicht ganz sicher, aber
sizeof(bmInfoHeader) + sizeof(bmFileHeader) == 54.

Die 1024 glaube ich ist die Farbpallete.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.04.2005, 18:08 Uhr
pippo



Den InfoHeader hab ich ganz vergessen, der ist 40Bytes groß. Der FileHeader hat 54Bytes. Was ich aber dachte ist, dass der FileHeader und der InfoHeader schon bei den 1024 Bytes dabei sind
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: