0

全部,

我正在尝试将 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 那么这一切都很容易。

有人有更好更干净的片段吗?

4

1 回答 1

1

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

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

于 2008-11-29T21:35:47.223 回答