2008-11-29 2 views
0

Все,Как загрузить bmp в массив GLubyte?

Я пытаюсь загрузить файл 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, тогда все легко.

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

ответ

1

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

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

+0

Спасибо за ваши замечания по LoadImage - я знаю, как открыть файл с помощью ifstream - я как бы надеялся, что найду фрагмент вместо того, чтобы идти туда и выяснить с нуля, как читать байты по-байтам (я даже думаю Я уже делал это smt как N лет назад), поскольку это звучит как общая задача. – JohnIdol 2008-11-29 21:44:39

-2

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

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

См. Также this question.

+0

Я не использую glaux. Поскольку это общая задача, я ожидаю, что кто-то покажет мне, как это сделать, или указать некоторые полезные примеры в Интернете, поскольку я ничего не мог найти. На данный момент я конвертирую bmp в raw. – JohnIdol 2008-12-08 13:23:10

Смежные вопросы