8Bit Bitmap laden



  • Ich möchte gern ein ausschliesslich 8bit Bitmap laden und habe mir dafür eine Funktion geschrieben. Allerdings stehen in dem Datenspeicher nicht die erwartentende Daten, deshalb habe ich die Vermutung das ich irgendwas in der Formatbeschreibung falsch gedeutelt habe.

    void TForm1::LoadBMP(const char* chFile)
    {
        BITMAPFILEHEADER bmfh;
        BITMAPINFOHEADER bmih;
        BYTE *aBitmapData = NULL;
    
        ifstream ifs( chFile, ios::in | ios::binary );
    
        if ( ifs.fail() ) return;
    
        //Header auslesen
        ifs.read( (char*)&bmfh, sizeof(BITMAPFILEHEADER) );
        ifs.read( (char*)&bmih, sizeof(BITMAPINFOHEADER) );
    
        if ( bmih.biBitCount != 8 ) return;
    
        //Datenbereich erstellen
        aBitmapData = new BYTE[ bmih.biSizeImage ];
    
        //Dateizeiger positionieren Offsetbits ab BITMAPFILEHEADER
        ifs.seekg( bmfh.bfOffBits + sizeof( bmfh ) );
    
        ifs.read( (char*)aBitmapData, sizeof(BYTE)*bmih.biSizeImage );
    
        delete [] aBitmapData;
    }
    

    Ich weis, macht so wenig Sinn, wird auch noch geändert sobald ich es nal geschafft habe die richtigen Daten zu laden.



  • Ich hab das jetzt noch bissel debugt, werd aber einfach nicht schlau draus.
    bfOffBits trägt den WErt 1078, die wirklichen Daten beginnen aber augenscheinlich erst bei 1178. Und dann dort auch mit dem letzten Pixel, so wies aussieht.

    WErden Bitmaps rückwärst gespeichert?
    Wie komme ich auf den tatsächlichen Offstet?
    (BitmapfileHeadergröße + bfOffBits = Offset) scheint ja nicht zu stimmen.


Anmelden zum Antworten