Como carregar bmp em array GLubyte?
Pergunta
All,
Eu estou tentando carregar um arquivo bmp em uma matriz GLubyte (sem usar aux).
É inacreditável como o que eu pensei que teria sido uma tarefa trivial está sugando horas do meu tempo.
Parece que não consigo encontrar nada no Google!
Este é o que eu cortei juntos, mas não é muito de trabalho:
// 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);
O que acontece é a chamada para LoadImage parece estar voltando Undefined Valor (NULL eu não sou capaz de descobrir se ele é realmente o carregamento do bmp ou não? - um pouco confuso).
No momento eu estou convertendo bmps à matéria, então é nada fácil.
Alguém tem alguma melhor e mais limpo trecho?
Solução
LoadImage()
só pode carregar bitmaps que são incorporados em seu arquivo executável com o compilador de recursos - não pode carregar bitmaps externos do sistema de arquivos. Felizmente, arquivos de bitmap são realmente simples de ler-se. Consulte Wikipedia para uma descrição do formato de arquivo.
Basta abrir o arquivo como você faria com qualquer outro arquivo ( importante : abra-o no modo binário, isto é, com a opção "rb"
usando fopen
ou a bandeira ios::binary
usando o C ++ ifstream
), lido em as dimensões de bitmap, e ler na dados de pixel cru.
Outras dicas
é uma tarefa comum, é por isso Glaux, entre outros, dá-lhe funções para ele.
A leitura de um bitmap é uma questão trivial, especialmente se há apenas uma profundidade / bpp para dar conta.
Também ver esta questão .