Вопрос

Все,

Я пытаюсь загрузить файл 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 или нет - немного запутался).

На данный момент конвертирую bmps в raw, тогда все легко.

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top