我想从资源文件加载HBITMAP并将其用作OpenGL纹理。我使用的代码:
HBITMAP hBmp = (HBITMAP) LoadImage(hInstance,
MAKEINTRESOURCE(id), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
BITMAP BM;
GetObject(hBmp, sizeof(BM), &BM);
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
GLvoid* bits = BM.bmBits;
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, BM.bmWidth,
BM.bmHeight, 0, GL_BGRA_EXT,
GL_UNSIGNED_BYTE,
bits);
但是我总是从Visual Studio中收到一个错误,我无法访问指针
bits
。错误在代码的最后一行:bits);
实际上,我可以使用NULL指针代替
bits
而不会出现错误。我可以将bits
输出到使用消息框。有人知道我的代码有什么问题吗? 最佳答案
从GetObject
文档中:
如果hgdiobj
是通过任何其他方式创建的位图的句柄,则GetObject
仅返回位图的宽度,高度和颜色格式信息。您可以通过调用GetDIBits
或GetBitmapBits
函数来获取位图的位值。
在上下文中,“其他方式”是除CreateDIBSection
以外的任何东西。您不使用CreateDIBSection
,而是使用LoadImage
。 LR_CREATEDIBSECTION
标志将您归入哪个类别尚不清楚,但解决方法很明确:使用GetDIBits
。
关于c++ - 加载并将HBITMAP转换为OpenGL纹理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23301171/