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?

Foi útil?

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top