Как загрузить bmp в массив GLubyte? - PullRequest
0 голосов
/ 30 ноября 2008

All

Я пытаюсь загрузить bmp-файл в массив GLubyte (без использования aux).

Невероятно, как то, что я думал, было бы тривиальной задачей, отнимать часы моего времени.

Не могу найти что-нибудь в Google!

Это то, что я взломал вместе, но это не совсем работает:

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

Что происходит, если вызов LoadImage, похоже, возвращает неопределенное значение (NULL? Я не могу понять, действительно ли он загружает BMP или нет - немного запутался).

В настоящее время я конвертирую bmp в raw, тогда все просто.

У кого-нибудь есть лучше и чище фрагмент?

Ответы [ 2 ]

1 голос
/ 30 ноября 2008

LoadImage() может загружать только растровые изображения, встроенные в ваш исполняемый файл, с помощью компилятора ресурсов - он не может загружать внешние растровые изображения из файловой системы. К счастью, растровые файлы действительно просты для чтения самостоятельно. См. Википедия для описания формата файла.

Просто откройте файл, как и любой другой файл ( важно : откройте его в двоичном режиме, т. Е. С опцией "rb", используя fopen или флагом ios::binary, используя C ++ ifstream), прочитать в растровых измерениях и прочитать в необработанных пиксельных данных.

0 голосов
/ 01 декабря 2008

Это - это обычная задача, поэтому glaux, помимо прочего, предоставляет вам функции для нее.

Чтение растрового изображения - тривиальный вопрос, особенно если для учета требуется только одна глубина / bpp.

Также см. этот вопрос .

...