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.