Come caricare bmp nell'array GLubyte?
Domanda
Tutti,
Sto cercando di caricare un file bmp in un array GLubyte (senza usare aux).
È incredibile come ciò che pensavo sarebbe stato un compito banale sta risucchiando ore del mio tempo.
Non riesco a trovare nulla su Google!
Questo è ciò che ho hackerato insieme ma non funziona del tutto:
// load texture
GLubyte *customTexture;
string fileName("C:\\Development\\Visual Studio 2008\\Projects\\OpenGL_Test\\Crate.bmp");
// Use LoadImage() to get the image loaded into a DIBSection
HBITMAP hBitmap = (HBITMAP)LoadImage( NULL, (LPCTSTR)const_cast<char*>(fileName.c_str()), IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );
customTexture = new GLubyte[3*256*256]; // size should be the size of the .bmp file
GetBitmapBits(hBitmap, 3*256*256, (LPVOID) customTexture);
GetBitmapDimensionEx(hBitmap,&szBitmap);
Quello che succede è che la chiamata a LoadImage sembra restituire un valore indefinito (NULL? Non sono in grado di capire se sta effettivamente caricando il bmp o meno - un po 'confuso).
Al momento sto convertendo bmps in raw, quindi è tutto facile.
Qualcuno ha uno snippet migliore e più pulito?
Soluzione
LoadImage ()
può caricare solo bitmap incorporate nel file eseguibile con il compilatore di risorse - non può caricare bitmap esterne dal file system. Fortunatamente, i file bitmap sono davvero semplici da leggere. Vedi Wikipedia per una descrizione del formato del file.
Apri il file come faresti con qualsiasi altro file ( importante : aprilo in modalità binaria, ovvero con l'opzione " rb "
utilizzando fopen
o il ios :: binary
usando il C ++ ifstream
), leggi le dimensioni bitmap e leggi i dati pixel grezzi.
Altri suggerimenti
è un compito comune, ecco perché glaux, tra gli altri, ti offre funzioni per questo.
Leggere una bitmap è una cosa da poco, specialmente se c'è solo una profondità / bpp da tenere in considerazione.
Vedi anche questa domanda .