Bitmap - Farbtabelle einlesen?



  • Ich versuche die Farbtabelle eines 8bpp Bitmaps einzulesen:

    vector<vector<unsigned char> > colorTable;
    colorTable.resize(256);
    for(int i=0; i<=255; i++){
      colorTable[i].resize(3);
    }
    fstream readStream;
    readStream.open(filename.c_str(),ios::in|ios::binary);
    
    //Header und Info Header überspringen
    readStream.seekg(14+40, ios::beg);
    //Farbtabelle einlesen
    unsigned char readChar;
    for(int i=0; i<=255; i++){
      for(int j=0; j<=2;j++){
        readStream>>readChar;
        colorTable[i][j]=readChar;
      }
      //leerposition überspringen
      readStream>>readChar; 
      //leere Position überprüfen
      if((int)readChar!=0){
        cout<<"err";
      }
    }
    

    Irgendwie bekomme ich an jener Stelle welche eigentlich leer sein sollte teilweise werten von 0 und -128. Dabei benutze ich aber unsigned char und laut wiki: http://de.wikipedia.org/wiki/Windows_Bitmap sollte die vierte Position immer leer sein. 😕



  • Binärdaten solltest du nicht mit >> einlesen, da dabei Steuerzeichen (Leerzeichen, Tabs, etc.) überlesen werden.
    Kannst es ja nach dem Lesen mal mit tellg() überprüfen.
    Versuch es mal mit get() oder read().

    P.S: Du solltest einfach die ganze Tabelle am Stück in eine konstantes (2-dim.) Array (mittels read()) einlesen - in diesem Fall ist std::vector dafür nicht so geeignet.



  • Immer diese Steuerzeichen...
    Danke für die Hilfe, funktioniert nun mit der read Funktion und einem 2D Array. Werden die Leerdaten zwar mitgespeichert, aber das Schreiben geht dafür auch einfacher.


Anmelden zum Antworten