如何将bmp加载到GLubyte数组中?

时间:2008-11-29 21:14:45

标签: c++ opengl glut

所有

我正在尝试将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的调用似乎是返回Undefined Value(NULL?我无法弄清楚它是否实际加载了bmp - 有点困惑)。

目前我正在将bmps转换为raw,这很容易。

任何人都有更好更清洁的片段吗?

2 个答案:

答案 0 :(得分:1)

LoadImage()只能使用资源编译器加载嵌入到可执行文件中的位图 - 它无法从文件系统加载外部位图。幸运的是,位图文件非常易于阅读。有关文件格式的说明,请参阅Wikipedia

只需像打开任何其他文件一样打开文件(重要:以二进制模式打开它,即使用"rb"选项使用fopen或{{ 1}}使用C ++ ios::binary)标记,读取位图尺寸,并读取原始像素数据。

答案 1 :(得分:-2)

是一项常见的任务,这就是为什么glaux会为你提供功能的原因。

读取位图是一件小事,特别是如果只有一个深度/ bpp需要考虑。

另见this question