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?

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top