Announcement

Collapse
No announcement yet.

bmp header in struct

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • bmp header in struct

    Hallo,
    bin noch ziemlich am Anfang mit c++.
    Ich habe Probleme mit folgendem code.
    Ich will die Bitmapheader in ein struct bringen.
    Die ersten 2 chars werden korrekt gelesen "B","M",
    die anderen Variablen stimmen nach dem lesen nicht
    mit den Daten in der Datei überein.
    Danke für Hilfe.

    Code:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    fstream f;
    struct bmpheader
      {
       char b;
       char m;
       unsigned long filesize;
       unsigned long reserved;
       unsigned long offset;
       unsigned long headersize;
       // rest folgt
      };
    struct bmpheader bmp;
    
    if (OpenDialog1->Execute()){
            // Einlesen der Datei in f
            f.open(OpenDialog1->FileName.c_str(),ios::binary|ios::in);
    
            if (!f.good()) ShowMessage("Fehler beim Öffnen");
            f.read((char*)&bmp,sizeof(struct bmpheader));
    
            f.close(); // schließt die Datei nicht unbedingt nötig
    }
    }

  • #2
    http://www.marquardtnet.info/cecke/index.htm
    Christian

    Comment


    • #3
      Danke,
      deine Seite ist hilfreich.
      Doch welcher fehler ist in meinem code ?
      Das mir noch Grundlagen fehlen ist mir auch klar.
      mfg
      siranton

      Comment


      • #4
        Der Link scheint nicht so ganz zu stimmen

        http://www.marquardtnet.info/cecke/t...bmpformat.html


        Vergleich die Bytes, dein Aufbau der Struktur stimmt nicht. Beachte, dass die meisten 32Bit Systeme einen int jetzt als 4 Byte darstellen (wie ein long).
        Christian

        Comment


        • #5
          Sorry,
          aber für die 2 int variablen habe ich ja eine long eingesetzt.
          glesen werden nur die 2 chars richtig.

          Comment


          • #6
            Deine Struktur:

            1 Byte char b;
            1 Byte char m;
            4 Byte unsigned long filesize;
            4 Byte unsigned long reserved;
            4 Byte unsigned long offset;
            4 Byte unsigned long headersize;

            Summe 18 Byte


            BMP-Fileheader Struktur

            int 2 Byte "BM"
            long 4 Byte Länge der Datei
            int 2 Byte Reserviert = 0
            int 2 Byte Reserviert = 0
            long 4 Byte Beginn der Rasterdaten

            Summe 14 Byte
            Christian

            Comment


            • #7
              Wenn meine struct falsch ist müsste doch zumindest die Filesize variable richtig gelesen werden oder?

              Ich habe alle Binär Daten Richtig wenn ich sie in ein struct nur aus chars einlese.
              Danke für deine mühe

              Comment


              • #8
                mach es so (dier Strukturen sind schon vordefiniert im System):

                unsigned long anzahl;
                BITMAPFILEHEADER bmp;
                HANDLE datei=CreateFile("test.bmp",GENERIC_READ,0,NULL,OP EN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
                ReadFile(datei,&bmp,sizeof(BITMAPFILEHEADER),&anza hl,NULL);
                CloseHandle(datei);
                Christian

                Comment


                • #9
                  Danke,
                  funzt irgendwie alles nicht irgend was mach ich falsch.
                  anbei mal ein Screenshot.
                  Attached Files

                  Comment


                  • #10
                    kann ich nicht nachvollziehen, Sende mir das Projekt + das bmp-File mal zu
                    Christian

                    Comment


                    • #11
                      Hallo,
                      wollte nur mal sagen das alles mit dem C++Builder 2007 funzt.
                      Jetz muss ich nur in den 30 Tagen alles schaffen.

                      Comment


                      • #12
                        Dann viel Glück
                        Christian

                        Comment


                        • #13
                          Wenn du den C++Builder benutzt, warum so umständlich

                          Schau die die Klasse TBitmap an
                          Christian

                          Comment


                          • #14
                            Ich denke mal, dass Du ein Problem mit der Ausrichtung der einzelnen Felder innerhalb der Sruct hast.

                            BMP-Fileheader Struktur

                            int 2 Byte "BM"
                            long 4 Byte Länge der Datei
                            int 2 Byte Reserviert = 0
                            int 2 Byte Reserviert = 0
                            long 4 Byte Beginn der Rasterdaten

                            Nach den 2 Bytes "BM" folgt ein Long-Int. Ein 32 Bit- Compiler richtet das normalerweise automatisch auf 32-Bit-Grenze aus. d.h. der Computer
                            baut im Speicher die Struct wie folgt auf:

                            int 2 Byte "BM"
                            -- automatisch eingefügt: 2 Bytes fuer die Ausrichtung
                            long 4 Byte Länge der Datei
                            int 2 Byte Reserviert = 0
                            int 2 Byte Reserviert = 0
                            long 4 Byte Beginn der Rasterdaten

                            Wenn Du jetzt den HDR liesst, passen die Daten nicht zur Struct.

                            Könnte das Dein Problem sein, oder lieg ich falsch??

                            Alfred

                            Comment


                            • #15
                              jo, das ist das Problem, aber warum die Struktur selbst definieren, wenn es sie schon gibt. Mit entsprechenden Einstellungen kann man das auch umgehen....
                              Christian

                              Comment

                              Working...
                              X