Pregunta

Todos,

Estoy tratando de cargar un archivo bmp en una matriz GLubyte (sin usar aux).

Es increíble cómo lo que pensé que habría sido una tarea trivial está absorbiendo horas de mi tiempo.

¡Parece que no puedo encontrar nada en Google!

Esto es lo que pirateé juntos pero no funciona del todo:

// 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);

Lo que sucede es que la llamada a LoadImage parece estar devolviendo un valor indefinido (¿NULL? No puedo averiguar si realmente está cargando el bmp o no, un poco confundido).

En el momento en que estoy convirtiendo bmps a raw, todo es fácil.

¿Alguien tiene un fragmento mejor y más limpio?

¿Fue útil?

Solución

LoadImage () solo puede cargar mapas de bits incrustados en su archivo ejecutable con el compilador de recursos; no puede cargar mapas de bits externos desde el sistema de archivos. Afortunadamente, los archivos de mapa de bits son realmente fáciles de leer. Consulte Wikipedia para obtener una descripción del formato de archivo.

Simplemente abra el archivo como lo haría con cualquier otro archivo ( importante : ábralo en modo binario, es decir, con la opción " rb " usando fopen o la bandera ios :: binary usando el C ++ ifstream ), lea en las dimensiones del mapa de bits y lea en los datos de píxeles sin procesar.

Otros consejos

Es es una tarea común, es por eso que glaux, entre otros, le da funciones para ello.

Leer un mapa de bits es un asunto trivial, especialmente si solo hay una profundidad / bpp para tener en cuenta.

Consulte también esta pregunta .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top